@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,92 @@
1
+ /**
2
+ * Order-independent transparency: the arithmetic, so it can be asserted without a device.
3
+ *
4
+ * **Two panes of glass should not depend on which was submitted first.** Sorted alpha blending is
5
+ * order-dependent by construction — `over` does not commute — so a translucent set is drawn back to
6
+ * front and anything the sort cannot separate flickers or wins arbitrarily: two panes that
7
+ * intersect, a pane containing another, a pane and the smoke inside it. A consumer's answer is
8
+ * usually to sort harder, which cannot fix an intersection at all.
9
+ *
10
+ * **Weighted blending replaces the ordering with a sum.** Each fragment contributes its colour
11
+ * scaled by a weight that falls off with distance, and separately multiplies a running
12
+ * transmittance. A sum and a product both commute, so the frame does not depend on the order the
13
+ * fragments arrived in — which is the property the census row asks for, and it is asserted here
14
+ * against numbers rather than argued about.
15
+ *
16
+ * **It is an approximation of the ordering and exact for one layer**, which is the honest way to
17
+ * state what it buys: with a single translucent surface there is no ordering to approximate and
18
+ * this reproduces `over` precisely, and the test beside it pins that. With several, near layers
19
+ * count for more than far ones and the result is plausible rather than correct — which is what a
20
+ * pane of glass needs and what a stained-glass window with eight overlapping leaves does not.
21
+ *
22
+ * McGuire and Bavoil, *Weighted Blended Order-Independent Transparency*, JCGT 2013 — equation 9
23
+ * for the weight, and its recommended constants, which are what the clamps below are.
24
+ *
25
+ * The one thing here that is not arithmetic is `OIT_MULTISAMPLE_REFUSAL`, and it is here for the
26
+ * same reason: it is a decision both backends take, so it is written once where neither owns it.
27
+ */
28
+ /** A colour the accumulation is working on, as three numbers rather than a texture fetch. */
29
+ export type Rgb = readonly [number, number, number];
30
+ /**
31
+ * What the two targets hold between them.
32
+ *
33
+ * `accum` is the weighted sum of premultiplied colour with the weighted alpha in its fourth
34
+ * channel; `reveal` is the running product of what each layer let through. On a GPU these are two
35
+ * render targets with two blend states — additive for one, multiplicative for the other — and this
36
+ * object is the same numbers on the CPU so the algebra has somewhere to be tested.
37
+ */
38
+ export interface OitAccumulator {
39
+ accum: [number, number, number, number];
40
+ /** One is "nothing has covered this pixel yet", which is why it is not zero. */
41
+ reveal: number;
42
+ }
43
+ /** An empty pixel: nothing accumulated, everything still revealed. */
44
+ export declare function newOitAccumulator(): OitAccumulator;
45
+ /**
46
+ * How much a fragment at `viewDepth` metres and this alpha counts for.
47
+ *
48
+ * **A near fragment must count for more than a far one**, or the accumulation is an unweighted
49
+ * average: a pane thirty metres away would contribute as much as one against the camera, which
50
+ * reads as fog rather than as glass.
51
+ *
52
+ * **Clamped at both ends, and the clamp is what keeps this stable in float.** Without a ceiling a
53
+ * fragment on the near plane takes a weight large enough to swamp every other layer, and their
54
+ * contributions are then lost to rounding inside a 16-bit target; without a floor a distant one
55
+ * rounds to nothing and vanishes rather than fading.
56
+ */
57
+ export declare function oitWeight(viewDepth: number, alpha: number): number;
58
+ /**
59
+ * Fold one fragment in.
60
+ *
61
+ * **A sum and a product, which is the whole mechanism**: both commute, so the pixel does not
62
+ * depend on the order its fragments arrived in. A change that made either depend on order — an
63
+ * `if` on what is already there, a max instead of a sum — breaks the row this exists to close, and
64
+ * the test beside this fails before it reaches a GPU.
65
+ */
66
+ export declare function accumulateOit(state: OitAccumulator, colour: Rgb, alpha: number, viewDepth: number): void;
67
+ /**
68
+ * The two targets composited over what is behind them.
69
+ *
70
+ * The weighted sum divided by the weighted alpha is the average colour the layers make; `reveal`
71
+ * says how much of the background still shows through. For one layer that reduces exactly to
72
+ * `colour * alpha + background * (1 - alpha)`, which is `over` — the anchor the test asserts.
73
+ */
74
+ export declare function resolveOit(state: OitAccumulator, background: Rgb): [number, number, number];
75
+ /**
76
+ * What both backends say when a profile asks for this and multisampling excludes it.
77
+ *
78
+ * **One string rather than one per backend, and that is rule 1 of the parity hard rule**:
79
+ * decisions live in backend-neutral code and only the binding is per-backend. The engine already
80
+ * paid for the other arrangement — `compositeWantsDepth` was two copies of one expression, depth
81
+ * of field was added to one of them, and the effect then ran against a discarded attachment. A
82
+ * refusal is a smaller thing than a depth attachment and drifts exactly as easily: the decal and
83
+ * reflection refusals beside this one are duplicated literals whose two halves have to be diffed
84
+ * by eye to know they still agree.
85
+ *
86
+ * **Why the effect is excluded rather than degraded.** Both passes attach the scene target's own
87
+ * depth and test against it, and above one sample the frame is not drawn into that texture — it
88
+ * is drawn into a multisampled renderbuffer, and the texture receives a copy at the end of the
89
+ * frame if anything asked for one. So the panes would be rejected against the frame before, or
90
+ * against a texture nothing has ever written.
91
+ */
92
+ export declare const OIT_MULTISAMPLE_REFUSAL: string;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Order-independent transparency: the arithmetic, so it can be asserted without a device.
3
+ *
4
+ * **Two panes of glass should not depend on which was submitted first.** Sorted alpha blending is
5
+ * order-dependent by construction — `over` does not commute — so a translucent set is drawn back to
6
+ * front and anything the sort cannot separate flickers or wins arbitrarily: two panes that
7
+ * intersect, a pane containing another, a pane and the smoke inside it. A consumer's answer is
8
+ * usually to sort harder, which cannot fix an intersection at all.
9
+ *
10
+ * **Weighted blending replaces the ordering with a sum.** Each fragment contributes its colour
11
+ * scaled by a weight that falls off with distance, and separately multiplies a running
12
+ * transmittance. A sum and a product both commute, so the frame does not depend on the order the
13
+ * fragments arrived in — which is the property the census row asks for, and it is asserted here
14
+ * against numbers rather than argued about.
15
+ *
16
+ * **It is an approximation of the ordering and exact for one layer**, which is the honest way to
17
+ * state what it buys: with a single translucent surface there is no ordering to approximate and
18
+ * this reproduces `over` precisely, and the test beside it pins that. With several, near layers
19
+ * count for more than far ones and the result is plausible rather than correct — which is what a
20
+ * pane of glass needs and what a stained-glass window with eight overlapping leaves does not.
21
+ *
22
+ * McGuire and Bavoil, *Weighted Blended Order-Independent Transparency*, JCGT 2013 — equation 9
23
+ * for the weight, and its recommended constants, which are what the clamps below are.
24
+ *
25
+ * The one thing here that is not arithmetic is `OIT_MULTISAMPLE_REFUSAL`, and it is here for the
26
+ * same reason: it is a decision both backends take, so it is written once where neither owns it.
27
+ */
28
+ /** An empty pixel: nothing accumulated, everything still revealed. */
29
+ export function newOitAccumulator() {
30
+ return { accum: [0, 0, 0, 0], reveal: 1 };
31
+ }
32
+ /**
33
+ * How much a fragment at `viewDepth` metres and this alpha counts for.
34
+ *
35
+ * **A near fragment must count for more than a far one**, or the accumulation is an unweighted
36
+ * average: a pane thirty metres away would contribute as much as one against the camera, which
37
+ * reads as fog rather than as glass.
38
+ *
39
+ * **Clamped at both ends, and the clamp is what keeps this stable in float.** Without a ceiling a
40
+ * fragment on the near plane takes a weight large enough to swamp every other layer, and their
41
+ * contributions are then lost to rounding inside a 16-bit target; without a floor a distant one
42
+ * rounds to nothing and vanishes rather than fading.
43
+ */
44
+ export function oitWeight(viewDepth, alpha) {
45
+ const z = Math.max(0, viewDepth) / 200;
46
+ const falloff = 0.03 / (1e-5 + z * z * z * z);
47
+ return alpha * Math.min(3e3, Math.max(1e-2, falloff));
48
+ }
49
+ /**
50
+ * Fold one fragment in.
51
+ *
52
+ * **A sum and a product, which is the whole mechanism**: both commute, so the pixel does not
53
+ * depend on the order its fragments arrived in. A change that made either depend on order — an
54
+ * `if` on what is already there, a max instead of a sum — breaks the row this exists to close, and
55
+ * the test beside this fails before it reaches a GPU.
56
+ */
57
+ export function accumulateOit(state, colour, alpha, viewDepth) {
58
+ const w = oitWeight(viewDepth, alpha);
59
+ state.accum[0] += colour[0] * alpha * w;
60
+ state.accum[1] += colour[1] * alpha * w;
61
+ state.accum[2] += colour[2] * alpha * w;
62
+ state.accum[3] += alpha * w;
63
+ state.reveal *= 1 - alpha;
64
+ }
65
+ /**
66
+ * The two targets composited over what is behind them.
67
+ *
68
+ * The weighted sum divided by the weighted alpha is the average colour the layers make; `reveal`
69
+ * says how much of the background still shows through. For one layer that reduces exactly to
70
+ * `colour * alpha + background * (1 - alpha)`, which is `over` — the anchor the test asserts.
71
+ */
72
+ export function resolveOit(state, background) {
73
+ /* Guarded because a pixel no fragment touched has a weighted alpha of zero, and the reveal of
74
+ one below then discards whatever this produced anyway. */
75
+ const weight = Math.max(state.accum[3], 1e-5);
76
+ const average = [
77
+ state.accum[0] / weight,
78
+ state.accum[1] / weight,
79
+ state.accum[2] / weight,
80
+ ];
81
+ const covered = 1 - state.reveal;
82
+ return [
83
+ average[0] * covered + background[0] * state.reveal,
84
+ average[1] * covered + background[1] * state.reveal,
85
+ average[2] * covered + background[2] * state.reveal,
86
+ ];
87
+ }
88
+ /**
89
+ * What both backends say when a profile asks for this and multisampling excludes it.
90
+ *
91
+ * **One string rather than one per backend, and that is rule 1 of the parity hard rule**:
92
+ * decisions live in backend-neutral code and only the binding is per-backend. The engine already
93
+ * paid for the other arrangement — `compositeWantsDepth` was two copies of one expression, depth
94
+ * of field was added to one of them, and the effect then ran against a discarded attachment. A
95
+ * refusal is a smaller thing than a depth attachment and drifts exactly as easily: the decal and
96
+ * reflection refusals beside this one are duplicated literals whose two halves have to be diffed
97
+ * by eye to know they still agree.
98
+ *
99
+ * **Why the effect is excluded rather than degraded.** Both passes attach the scene target's own
100
+ * depth and test against it, and above one sample the frame is not drawn into that texture — it
101
+ * is drawn into a multisampled renderbuffer, and the texture receives a copy at the end of the
102
+ * frame if anything asked for one. So the panes would be rejected against the frame before, or
103
+ * against a texture nothing has ever written.
104
+ */
105
+ export const OIT_MULTISAMPLE_REFUSAL = "driftengine: order-independent transparency attaches the scene target's own depth and tests " +
106
+ 'against it, and a multisampled frame is not drawn into that texture — so translucent draws ' +
107
+ 'stay sorted and blended wherever `sceneSamples` is above one. Antialiasing and this effect ' +
108
+ 'are a choice of one.';
@@ -0,0 +1,140 @@
1
+ import { type ParticleMaterial } from './particleMaterial.ts';
2
+ import type { ParticleInstances } from './particlePool.ts';
3
+ /**
4
+ * One draw call for a live particle pool: one camera-facing quad per particle, or a
5
+ * crossed pair of world-fixed ones when `facing` asks for them.
6
+ *
7
+ * Instanced: the cross is uploaded once as eight vertices, and each frame only the
8
+ * per-particle stream is re-sent. That is the difference between this and the
9
+ * scatter path it replaces — `InstancedMesh` is built for data that never changes
10
+ * after placement, and a particle system's data changes entirely every frame.
11
+ *
12
+ * Blending and depth are the batch's own decision because they are a property of
13
+ * the *material*: smoke occludes what is behind it and sparks add to it, and a
14
+ * caller that had to remember which would eventually forget. Neither writes depth
15
+ * — a soft particle that did would punch a hole in everything drawn after it.
16
+ */
17
+ export type ParticleBlend = 'additive' | 'alpha';
18
+ /**
19
+ * How a particle's quads are turned.
20
+ *
21
+ * `'camera'` is one quad facing the viewer, and the default. `'cross'` is the pair of
22
+ * world-fixed blades this batch drew before the option existed — see `uCameraFacing` in
23
+ * `shaders/particle.ts` for the artifact that made the default the other one, and for what
24
+ * the cross still buys a caller who wants it back.
25
+ */
26
+ export type ParticleFacing = 'camera' | 'cross';
27
+ export interface ParticleBatchOptions {
28
+ /**
29
+ * Which particle this is, by name.
30
+ *
31
+ * **This replaced a GLSL source string on 2026-08-13**, the same change and for the same
32
+ * reason as `PlumeOptions.material`: a caller-supplied shader is a capability that can only
33
+ * ever exist on WebGL2, and naming the material lets each backend resolve what it can
34
+ * compile. See `particleMaterial.ts`.
35
+ */
36
+ material: ParticleMaterial;
37
+ blend: ParticleBlend;
38
+ /**
39
+ * Seconds of travel a particle is stretched along. 0 for smoke.
40
+ *
41
+ * **The velocity it stretches along is a direction to be drawn on, not a motion being
42
+ * simulated, and it must stay that way.** Nothing here integrates it: a caller writes both
43
+ * position and velocity every frame, so a deterministic consumer that computes where a
44
+ * particle *is* from its own plan can still ask for the streak that a moving thing has. That
45
+ * is load-bearing outside this repository, where a corona's streamers are the spark material
46
+ * stretched radially and nothing about them moves. Advancing position from this would take
47
+ * the feature away from every caller that is not running a simulation.
48
+ */
49
+ stretchSec?: number;
50
+ /** How hard the noise erodes a puff, 0 to 1. Ignored by the spark and mote materials. */
51
+ erosion?: number;
52
+ /** How far past white a spark's core may go. Ignored by the smoke and mote materials. */
53
+ coreGain?: number;
54
+ /**
55
+ * Whether the medium's fog and underwater tint reach this pool. Ignored by the spark and
56
+ * smoke materials, which stay unconditionally fogged — a real ember and real grit belong in
57
+ * the same haze as the rest of the world, matching every particle drawn before this option
58
+ * existed. Defaults to false, because a caller reaching for `'mote'` over `'spark'`/`'smoke'`
59
+ * is usually asking for exactly what those two cannot draw: an unlit point exactly its own
60
+ * colour, untouched by distance. See `PARTICLE_MOTE_FRAG`'s own comment on `uFogEnabled`.
61
+ */
62
+ fog?: boolean;
63
+ /**
64
+ * Whether each particle is one camera-facing quad or a world-fixed cross of two.
65
+ *
66
+ * Defaults to `'camera'`, and **this default changed** — every particle drawn before it
67
+ * was a cross. A cross has a blade edge-on down each of two world axes, and a sprite
68
+ * squeezed into a one-pixel column spends its whole brightness there: a bright straight
69
+ * line through the middle, worst on the additive materials, and a pair of them from
70
+ * directly above. Consider `'cross'` when the camera stays near horizontal and the
71
+ * parallax of two blades is worth more than a stable brightness, which is the trade the
72
+ * shader's own comment on `uCameraFacing` lays out.
73
+ */
74
+ facing?: ParticleFacing;
75
+ /**
76
+ * Another batch whose compiled program this one should reuse.
77
+ *
78
+ * Several pools legitimately share a *material* while needing their own buffers —
79
+ * a game may have four kinds of smoke, each with its own colours, lifetime and
80
+ * capacity, all drawn by one fragment shader. Without this each of them compiles
81
+ * the same source again, which is pure boot time on the device where boot time is
82
+ * scarcest. The per-material constants stay per batch, because they are the point
83
+ * of having several.
84
+ *
85
+ * Only valid for the same `material`, and **that is now checked** — it was not, and could
86
+ * not be, while the material was an opaque source string a caller supplied. Naming it made
87
+ * the constraint expressible, so a spark batch reusing a smoke program fails at construction
88
+ * with both names rather than drawing sparks that look like smoke.
89
+ */
90
+ reuse?: ParticleBatch;
91
+ }
92
+ export declare class ParticleBatch {
93
+ readonly program: WebGLProgram;
94
+ readonly uniforms: Record<string, WebGLUniformLocation>;
95
+ private readonly vao;
96
+ private readonly buffers;
97
+ private readonly positionBuffer;
98
+ private readonly sizeBuffer;
99
+ private readonly spinBuffer;
100
+ private readonly colorBuffer;
101
+ private readonly alphaBuffer;
102
+ private readonly ageBuffer;
103
+ private readonly seedBuffer;
104
+ private readonly velocityBuffer;
105
+ private readonly blend;
106
+ private readonly stretchSec;
107
+ private readonly erosion;
108
+ private readonly coreGain;
109
+ private readonly fog;
110
+ private readonly facing;
111
+ /** False when the program belongs to another batch, so `dispose` leaves it alone. */
112
+ private readonly ownsProgram;
113
+ /** Which material compiled this batch's program, so `reuse` can be checked. */
114
+ readonly material: ParticleMaterial;
115
+ constructor(gl: WebGL2RenderingContext, capacity: number, options: ParticleBatchOptions);
116
+ /**
117
+ * Send this frame's particles.
118
+ *
119
+ * Only the live prefix of each array, which is what the pool's compaction
120
+ * exists for: a pool at a tenth of its capacity uploads a tenth of the bytes.
121
+ */
122
+ upload(gl: WebGL2RenderingContext, data: ParticleInstances): void;
123
+ /** Bind this material's own constants. Called once per draw, before `drawTo`. */
124
+ bindMaterial(gl: WebGL2RenderingContext): void;
125
+ /**
126
+ * Draw the live particles.
127
+ *
128
+ * Depth *tested* but not written, so a puff is correctly hidden behind the deck
129
+ * and never hides a puff behind it. Culling off, because a blade seen from
130
+ * behind is exactly as valid as one seen from the front.
131
+ */
132
+ drawTo(gl: WebGL2RenderingContext, count: number): void;
133
+ dispose(gl: WebGL2RenderingContext): void;
134
+ private send;
135
+ /**
136
+ * One attribute buffer. `divisor` 0 is per-vertex, 1 is per-instance — the whole
137
+ * mechanism by which eight vertices draw a thousand particles.
138
+ */
139
+ private attach;
140
+ }
@@ -0,0 +1,186 @@
1
+ import { compileProgram, uniformLocations } from './shader.js';
2
+ import { particleShaders } from './particleMaterial.js';
3
+ import { PARTICLE_BLADES, PARTICLE_INDICES, PARTICLE_VERTS } from './shaders/particle.js';
4
+ /** Corners of one blade, as a triangle-strip-friendly quad. */
5
+ const CORNERS = [
6
+ [-1, -1],
7
+ [1, -1],
8
+ [1, 1],
9
+ [-1, 1],
10
+ ];
11
+ export class ParticleBatch {
12
+ program;
13
+ uniforms;
14
+ vao;
15
+ buffers = [];
16
+ positionBuffer;
17
+ sizeBuffer;
18
+ spinBuffer;
19
+ colorBuffer;
20
+ alphaBuffer;
21
+ ageBuffer;
22
+ seedBuffer;
23
+ velocityBuffer;
24
+ blend;
25
+ stretchSec;
26
+ erosion;
27
+ coreGain;
28
+ fog;
29
+ facing;
30
+ /** False when the program belongs to another batch, so `dispose` leaves it alone. */
31
+ ownsProgram;
32
+ /** Which material compiled this batch's program, so `reuse` can be checked. */
33
+ material;
34
+ constructor(gl, capacity, options) {
35
+ /* The vertex stage comes with the material now; it used to be a separate argument that
36
+ every caller passed the same value for. */
37
+ const shaders = particleShaders(options.material);
38
+ const shared = options.reuse;
39
+ if (shared !== undefined && shared.material !== options.material) {
40
+ throw new Error(`createParticles: cannot reuse a "${shared.material}" program for a ` +
41
+ `"${options.material}" batch. \`reuse\` shares one compiled material between pools.`);
42
+ }
43
+ this.ownsProgram = shared === undefined;
44
+ this.material = options.material;
45
+ this.program =
46
+ shared?.program ??
47
+ compileProgram(gl, shaders.vertexSource, shaders.fragmentSource, shaders.label);
48
+ this.uniforms = shared?.uniforms ?? uniformLocations(gl, this.program, 'particleBatch');
49
+ this.blend = options.blend;
50
+ this.stretchSec = options.stretchSec ?? 0;
51
+ this.erosion = options.erosion ?? 0;
52
+ this.coreGain = options.coreGain ?? 1;
53
+ this.fog = options.fog ?? false;
54
+ this.facing = options.facing ?? 'camera';
55
+ const corners = new Float32Array(PARTICLE_VERTS * 2);
56
+ const blades = new Float32Array(PARTICLE_VERTS);
57
+ const indices = new Uint16Array(PARTICLE_INDICES);
58
+ for (let b = 0; b < PARTICLE_BLADES; b++) {
59
+ for (let c = 0; c < 4; c++) {
60
+ const v = b * 4 + c;
61
+ const corner = CORNERS[c] ?? [0, 0];
62
+ corners[v * 2] = corner[0];
63
+ corners[v * 2 + 1] = corner[1];
64
+ blades[v] = b;
65
+ }
66
+ const base = b * 4;
67
+ const i = b * 6;
68
+ indices[i] = base;
69
+ indices[i + 1] = base + 1;
70
+ indices[i + 2] = base + 2;
71
+ indices[i + 3] = base;
72
+ indices[i + 4] = base + 2;
73
+ indices[i + 5] = base + 3;
74
+ }
75
+ const vao = gl.createVertexArray();
76
+ if (vao === null)
77
+ throw new Error(`${shaders.label}: createVertexArray failed`);
78
+ this.vao = vao;
79
+ gl.bindVertexArray(vao);
80
+ this.attach(gl, 0, corners, 2, 0, shaders.label);
81
+ this.attach(gl, 1, blades, 1, 0, shaders.label);
82
+ this.positionBuffer = this.attach(gl, 2, capacity * 3, 3, 1, shaders.label);
83
+ this.sizeBuffer = this.attach(gl, 3, capacity, 1, 1, shaders.label);
84
+ this.spinBuffer = this.attach(gl, 4, capacity, 1, 1, shaders.label);
85
+ this.colorBuffer = this.attach(gl, 5, capacity * 3, 3, 1, shaders.label);
86
+ this.alphaBuffer = this.attach(gl, 6, capacity, 1, 1, shaders.label);
87
+ this.ageBuffer = this.attach(gl, 7, capacity, 1, 1, shaders.label);
88
+ this.seedBuffer = this.attach(gl, 8, capacity, 1, 1, shaders.label);
89
+ this.velocityBuffer = this.attach(gl, 9, capacity * 3, 3, 1, shaders.label);
90
+ const indexBuffer = gl.createBuffer();
91
+ if (indexBuffer === null)
92
+ throw new Error(`${shaders.label}: createBuffer failed`);
93
+ this.buffers.push(indexBuffer);
94
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
95
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
96
+ gl.bindVertexArray(null);
97
+ }
98
+ /**
99
+ * Send this frame's particles.
100
+ *
101
+ * Only the live prefix of each array, which is what the pool's compaction
102
+ * exists for: a pool at a tenth of its capacity uploads a tenth of the bytes.
103
+ */
104
+ upload(gl, data) {
105
+ const n = data.count;
106
+ if (n === 0)
107
+ return;
108
+ this.send(gl, this.positionBuffer, data.positions, n * 3);
109
+ this.send(gl, this.sizeBuffer, data.sizes, n);
110
+ this.send(gl, this.spinBuffer, data.spins, n);
111
+ this.send(gl, this.colorBuffer, data.colors, n * 3);
112
+ this.send(gl, this.alphaBuffer, data.alphas, n);
113
+ this.send(gl, this.ageBuffer, data.ages, n);
114
+ this.send(gl, this.seedBuffer, data.seeds, n);
115
+ this.send(gl, this.velocityBuffer, data.velocities, n * 3);
116
+ }
117
+ /** Bind this material's own constants. Called once per draw, before `drawTo`. */
118
+ bindMaterial(gl) {
119
+ const u = this.uniforms;
120
+ gl.uniform1f(u['uStretchSec'] ?? null, this.stretchSec);
121
+ gl.uniform1f(u['uCameraFacing'] ?? null, this.facing === 'camera' ? 1 : 0);
122
+ gl.uniform1f(u['uErosion'] ?? null, this.erosion);
123
+ gl.uniform1f(u['uCoreGain'] ?? null, this.coreGain);
124
+ /* Only the mote program declares uFogEnabled, so this is a no-op — not a leak into the
125
+ next draw — on the other two: `u['uFogEnabled']` is undefined there and gl.uniform1i
126
+ silently ignores a null location. */
127
+ gl.uniform1i(u['uFogEnabled'] ?? null, this.fog ? 1 : 0);
128
+ }
129
+ /**
130
+ * Draw the live particles.
131
+ *
132
+ * Depth *tested* but not written, so a puff is correctly hidden behind the deck
133
+ * and never hides a puff behind it. Culling off, because a blade seen from
134
+ * behind is exactly as valid as one seen from the front.
135
+ */
136
+ drawTo(gl, count) {
137
+ if (count === 0)
138
+ return;
139
+ gl.enable(gl.BLEND);
140
+ if (this.blend === 'additive')
141
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
142
+ else
143
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
144
+ gl.depthMask(false);
145
+ gl.disable(gl.CULL_FACE);
146
+ gl.bindVertexArray(this.vao);
147
+ gl.drawElementsInstanced(gl.TRIANGLES, PARTICLE_INDICES, gl.UNSIGNED_SHORT, 0, count);
148
+ gl.bindVertexArray(null);
149
+ gl.enable(gl.CULL_FACE);
150
+ gl.depthMask(true);
151
+ gl.disable(gl.BLEND);
152
+ }
153
+ dispose(gl) {
154
+ for (const buffer of this.buffers)
155
+ gl.deleteBuffer(buffer);
156
+ this.buffers.length = 0;
157
+ gl.deleteVertexArray(this.vao);
158
+ if (this.ownsProgram)
159
+ gl.deleteProgram(this.program);
160
+ }
161
+ send(gl, buffer, data, length) {
162
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
163
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, data, 0, length);
164
+ }
165
+ /**
166
+ * One attribute buffer. `divisor` 0 is per-vertex, 1 is per-instance — the whole
167
+ * mechanism by which eight vertices draw a thousand particles.
168
+ */
169
+ attach(gl, location, dataOrFloats, size, divisor, label) {
170
+ const buffer = gl.createBuffer();
171
+ if (buffer === null)
172
+ throw new Error(`${label}: createBuffer failed`);
173
+ this.buffers.push(buffer);
174
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
175
+ if (typeof dataOrFloats === 'number') {
176
+ gl.bufferData(gl.ARRAY_BUFFER, dataOrFloats * 4, gl.DYNAMIC_DRAW);
177
+ }
178
+ else {
179
+ gl.bufferData(gl.ARRAY_BUFFER, dataOrFloats, gl.STATIC_DRAW);
180
+ }
181
+ gl.enableVertexAttribArray(location);
182
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
183
+ gl.vertexAttribDivisor(location, divisor);
184
+ return buffer;
185
+ }
186
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Which particle material a caller wants, by name rather than by source.
3
+ *
4
+ * **The same change `PlumeMaterial` documents, for the same reason.**
5
+ * `ParticleBatchOptions.fragmentSource` was a GLSL string, and a caller-supplied GLSL string
6
+ * is a capability that can only ever exist on WebGL2 — WebGPU has no runtime compiler and this
7
+ * package must never ship one. Naming the material lets each backend resolve what it can
8
+ * compile.
9
+ *
10
+ * **The three are not interchangeable and never were**, which is why the names read as
11
+ * materials rather than as shaders: `erosion` is ignored by the spark and the mote, `coreGain`
12
+ * by the smoke and the mote, and `fog` by the spark and the smoke — and the options already
13
+ * document that. Naming them makes the pairing explicit instead of leaving it to a caller to
14
+ * match a source with the constants that suit it.
15
+ */
16
+ export type ParticleMaterial = 'smoke' | 'spark' | 'mote';
17
+ /** Both compilations of one material, and what the generator recorded about each stage. */
18
+ export interface ParticleShaders {
19
+ readonly label: string;
20
+ readonly vertexSource: string;
21
+ readonly fragmentSource: string;
22
+ readonly vertexWgsl: string;
23
+ readonly fragmentWgsl: string;
24
+ }
25
+ /** What the generator recorded about the shared vertex stage. */
26
+ export declare const PARTICLE_VERT_BINDINGS: {
27
+ readonly uniforms: 0;
28
+ readonly uniformSize: 96;
29
+ readonly fields: {
30
+ readonly uViewProj: {
31
+ readonly offset: 0;
32
+ readonly size: 64;
33
+ readonly type: "mat4";
34
+ };
35
+ readonly uCameraPos: {
36
+ readonly offset: 64;
37
+ readonly size: 12;
38
+ readonly type: "vec3";
39
+ };
40
+ readonly uStretchSec: {
41
+ readonly offset: 76;
42
+ readonly size: 4;
43
+ readonly type: "float";
44
+ };
45
+ readonly uCameraFacing: {
46
+ readonly offset: 80;
47
+ readonly size: 4;
48
+ readonly type: "float";
49
+ };
50
+ };
51
+ readonly textures: {};
52
+ };
53
+ /** Resolve a material name, or say which names exist. */
54
+ export declare function particleShaders(material: ParticleMaterial): ParticleShaders;
@@ -0,0 +1,42 @@
1
+ import { PARTICLE_MOTE_FRAG, PARTICLE_SMOKE_FRAG, PARTICLE_SPARK_FRAG, PARTICLE_VERT, } from './shaders/particle.js';
2
+ import { PARTICLE_BINDINGS, PARTICLE_MOTE_FRAG_WGSL, PARTICLE_SMOKE_FRAG_WGSL, PARTICLE_SPARK_FRAG_WGSL, PARTICLE_VERT_WGSL, } from './shaders/generated/particle.wgsl.js';
3
+ /**
4
+ * Every particle material this engine ships.
5
+ *
6
+ * One table with both compilations, rather than a lookup per backend — a material present in
7
+ * one and absent from the other is the drift the 2026-08-13 rule in `AGENTS.md` prevents.
8
+ */
9
+ const MATERIALS = {
10
+ smoke: {
11
+ label: 'particle:smoke',
12
+ vertexSource: PARTICLE_VERT,
13
+ fragmentSource: PARTICLE_SMOKE_FRAG,
14
+ vertexWgsl: PARTICLE_VERT_WGSL,
15
+ fragmentWgsl: PARTICLE_SMOKE_FRAG_WGSL,
16
+ },
17
+ spark: {
18
+ label: 'particle:spark',
19
+ vertexSource: PARTICLE_VERT,
20
+ fragmentSource: PARTICLE_SPARK_FRAG,
21
+ vertexWgsl: PARTICLE_VERT_WGSL,
22
+ fragmentWgsl: PARTICLE_SPARK_FRAG_WGSL,
23
+ },
24
+ mote: {
25
+ label: 'particle:mote',
26
+ vertexSource: PARTICLE_VERT,
27
+ fragmentSource: PARTICLE_MOTE_FRAG,
28
+ vertexWgsl: PARTICLE_VERT_WGSL,
29
+ fragmentWgsl: PARTICLE_MOTE_FRAG_WGSL,
30
+ },
31
+ };
32
+ /** What the generator recorded about the shared vertex stage. */
33
+ export const PARTICLE_VERT_BINDINGS = PARTICLE_BINDINGS.PARTICLE_VERT;
34
+ /** Resolve a material name, or say which names exist. */
35
+ export function particleShaders(material) {
36
+ const found = MATERIALS[material];
37
+ if (found === undefined) {
38
+ throw new Error(`createParticles: unknown particle material "${String(material)}". ` +
39
+ `Known materials: ${Object.keys(MATERIALS).join(', ')}.`);
40
+ }
41
+ return found;
42
+ }