@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,203 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.ts';
2
+ import {
3
+ LIGHTVOLUME_BINDINGS,
4
+ LIGHT_VOLUME_FRAG_WGSL,
5
+ LIGHT_VOLUME_VERT_WGSL,
6
+ } from '../../shaders/generated/lightVolume.wgsl.ts';
7
+ import { vertexBufferLayouts } from './buffers.ts';
8
+ import { DEPTH_FORMAT, type StageBindings } from './flatPass.ts';
9
+ import type { PipelineCache } from './pipelineCache.ts';
10
+ import { shaderModule } from './shaderModules.ts';
11
+
12
+ /**
13
+ * The light-volume pass: a closed hull, and a march down the view ray inside it.
14
+ *
15
+ * The geometry decides which pixels run and nothing else, so this is an ordinary indexed mesh
16
+ * draw with an unusual pipeline: **additive, depth tested, depth never written, and culling
17
+ * chosen per draw** rather than fixed.
18
+ *
19
+ * Culling is the part that is not boilerplate. A volume seen from outside is entered at its
20
+ * front faces and a volume seen from inside is entered at its back ones, so which face survives
21
+ * is a property of where the camera stands — `resolveLightVolume` answers it, and this file
22
+ * turns the answer into one of two pipelines.
23
+ */
24
+
25
+ /** Which permutation of the fragment stage: the sun-shadow lookup compiled in, or not. */
26
+ export type LightVolumeVariant = 'none' | 'directionalShadows';
27
+
28
+ export const LIGHT_VOLUME_VERT_FIELDS = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.fields;
29
+ export const LIGHT_VOLUME_VERT_SIZE = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.uniformSize;
30
+
31
+ const VERT_BINDING = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.uniforms;
32
+
33
+ /*
34
+ * The generated file is `as const`, so indexing it by a computed key is an error until the
35
+ * shape is declared once. Checked against the real object rather than asserted about it, which
36
+ * is what `flatPass.ts` does with the sixteen flat permutations and for the same reason.
37
+ */
38
+ const FRAGMENT_BINDINGS = LIGHTVOLUME_BINDINGS.lightVolumeFrag as unknown as Readonly<
39
+ Record<string, StageBindings>
40
+ >;
41
+
42
+ /** Everything the generator recorded about one permutation of the fragment stage. */
43
+ export function lightVolumeFragmentBindings(variant: LightVolumeVariant): StageBindings {
44
+ const found = FRAGMENT_BINDINGS[variant];
45
+ if (found === undefined) throw new Error(`lightVolumePass: no bindings for variant "${variant}"`);
46
+ return found;
47
+ }
48
+
49
+ const VISIBILITY_VERTEX = 0x1;
50
+ const VISIBILITY_FRAGMENT = 0x2;
51
+
52
+ /**
53
+ * The layout this variant binds against. **Both blocks are dynamic.**
54
+ *
55
+ * Unlike the flat pass, where the fragment block holds the lights and the fog and is settled
56
+ * once a frame, every field here belongs to one volume: its strength, its reach, its aperture,
57
+ * its own placement and the camera expressed in its own space. Two beams in a frame have
58
+ * nothing in common to hoist, so both blocks come out of a ring a slot at a time — see
59
+ * `UniformRing` for what a single buffer does to a second draw.
60
+ */
61
+ export function createLightVolumeBindGroupLayout(
62
+ device: GPUDevice,
63
+ variant: LightVolumeVariant,
64
+ ): GPUBindGroupLayout {
65
+ const fragment = lightVolumeFragmentBindings(variant);
66
+ const entries: GPUBindGroupLayoutEntry[] = [
67
+ {
68
+ binding: VERT_BINDING,
69
+ visibility: VISIBILITY_VERTEX,
70
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LIGHT_VOLUME_VERT_SIZE },
71
+ },
72
+ {
73
+ binding: fragment.uniforms,
74
+ visibility: VISIBILITY_FRAGMENT,
75
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: fragment.uniformSize },
76
+ },
77
+ ];
78
+
79
+ /*
80
+ * Three depth textures, declared `unfilterable-float` beside a `non-filtering` sampler, for
81
+ * the reason `flatPass.ts` gives: a depth format's supported sample types are
82
+ * `UnfilterableFloat | Depth` and never plain `Float`, so an empty `texture: {}` is rejected
83
+ * at bind time. It is also what this shader wants — `sunReach` takes one explicit-level tap
84
+ * per map and asks the hardware to blend nothing.
85
+ */
86
+ for (const texture of Object.values(fragment.textures)) {
87
+ entries.push({
88
+ binding: texture.texture,
89
+ visibility: VISIBILITY_FRAGMENT,
90
+ texture: { sampleType: 'unfilterable-float' },
91
+ });
92
+ entries.push({
93
+ binding: texture.sampler,
94
+ visibility: VISIBILITY_FRAGMENT,
95
+ sampler: { type: 'non-filtering' },
96
+ });
97
+ }
98
+ return device.createBindGroupLayout({ label: `lightVolume.layout:${variant}`, entries });
99
+ }
100
+
101
+ /**
102
+ * Bind the two rings and one view per declared map.
103
+ *
104
+ * `resolve` is asked by the shader's own name for each map, so the caller supplies what it has
105
+ * and a stand-in for the rest. **The stand-in has to read as unoccluded, not as absent**: the
106
+ * dynamic layer is sampled unconditionally, and `occlusion()` calls any stored depth below the
107
+ * receiver's a blocker — so a stand-in of zero would put the whole beam in shadow, which is a
108
+ * picture rather than an error. A white one-pixel texture is depth 1, the far plane, nothing in
109
+ * the way. `emptyTexture.ts` is the same value on the other backend for the same reason.
110
+ */
111
+ export function createLightVolumeBindGroup(
112
+ device: GPUDevice,
113
+ layout: GPUBindGroupLayout,
114
+ variant: LightVolumeVariant,
115
+ vertices: GPUBuffer,
116
+ fragments: GPUBuffer,
117
+ resolve: (name: string) => { view: GPUTextureView; sampler: GPUSampler },
118
+ ): GPUBindGroup {
119
+ const fragment = lightVolumeFragmentBindings(variant);
120
+ const entries: GPUBindGroupEntry[] = [
121
+ { binding: VERT_BINDING, resource: { buffer: vertices, size: LIGHT_VOLUME_VERT_SIZE } },
122
+ {
123
+ binding: fragment.uniforms,
124
+ resource: { buffer: fragments, size: fragment.uniformSize },
125
+ },
126
+ ];
127
+ for (const [name, texture] of Object.entries(fragment.textures)) {
128
+ const supplied = resolve(name);
129
+ entries.push({ binding: texture.texture, resource: supplied.view });
130
+ entries.push({ binding: texture.sampler, resource: supplied.sampler });
131
+ }
132
+ return device.createBindGroup({
133
+ label: `lightVolume.bindGroup:${variant}`,
134
+ layout,
135
+ entries,
136
+ });
137
+ }
138
+
139
+ /**
140
+ * The pipeline for one variant and one side of the hull.
141
+ *
142
+ * **`src-alpha, one`, which is `gl.blendFunc(SRC_ALPHA, ONE)` and the whole reason this pass
143
+ * exists.** Alpha blending moves what is behind a surface *toward* it, so an unlit beam drawn
144
+ * that way comes out darker than the sky and sweeps a solid dark wedge across the frame; see
145
+ * the history at the top of `shaders/lightVolume.ts`. The shader puts its energy in the colour
146
+ * and leaves alpha at 1, because a blend that multiplies by alpha squares anything written to
147
+ * both.
148
+ *
149
+ * The alpha channel is left as it was rather than accumulated, which differs from the GL call
150
+ * — `blendFunc` sets both channels — and is invisible here because the swap chain is
151
+ * configured `alphaMode: 'opaque'` and the composited alpha is discarded. It would stop being
152
+ * invisible the day a consumer wants the canvas composited against the page behind it, and
153
+ * that is the line to change.
154
+ *
155
+ * **Depth tested, never written.** A beam passes behind whatever stands in front of it, and
156
+ * occludes nothing itself: a volume of light is not a surface.
157
+ */
158
+ export function lightVolumePipeline(
159
+ cache: PipelineCache,
160
+ device: GPUDevice,
161
+ layout: GPUBindGroupLayout,
162
+ variant: LightVolumeVariant,
163
+ cullMode: GPUCullMode,
164
+ present: Readonly<Record<string, boolean>>,
165
+ key: string,
166
+ ): GPURenderPipeline {
167
+ return cache.get(key, () => ({
168
+ label: key,
169
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
170
+ vertex: {
171
+ module: shaderModule(device, {
172
+ label: 'lightVolume.vert',
173
+ code: LIGHT_VOLUME_VERT_WGSL,
174
+ }),
175
+ entryPoint: 'main',
176
+ /*
177
+ * The mesh's own interleaved layout, not a four-attribute one. This shader reads
178
+ * locations 0 to 3, and the pipeline still has to describe every buffer the draw sets —
179
+ * the depth pass has the same shape with one attribute.
180
+ */
181
+ buffers: vertexBufferLayouts(present),
182
+ },
183
+ fragment: {
184
+ module: shaderModule(device, {
185
+ label: `lightVolume.frag:${variant}`,
186
+ code: LIGHT_VOLUME_FRAG_WGSL[variant] ?? '',
187
+ }),
188
+ entryPoint: 'main',
189
+ targets: [
190
+ {
191
+ format: cache.format,
192
+ blend: {
193
+ color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
194
+ alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
195
+ },
196
+ },
197
+ ],
198
+ },
199
+ primitive: { topology: 'triangle-list', cullMode },
200
+ multisample: { count: cache.sampleCount },
201
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
202
+ }));
203
+ }
@@ -0,0 +1,270 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.ts';
2
+ import {
3
+ LINE_BINDINGS,
4
+ LINE_FRAG_WGSL,
5
+ LINE_VERT_WGSL,
6
+ } from '../../shaders/generated/line.wgsl.ts';
7
+ import { buildSegmentQuads } from '../../segmentQuads.ts';
8
+ import type { LineSegments } from '../../linePoints.ts';
9
+ import type { UniformFields } from './scatterPass.ts';
10
+ import { DEPTH_FORMAT } from './flatPass.ts';
11
+ import type { PipelineCache } from './pipelineCache.ts';
12
+ import { shaderModule } from './shaderModules.ts';
13
+
14
+ /**
15
+ * The line pass: a polyline with a real width, four vertices a segment.
16
+ *
17
+ * **The plain sibling of `boltPass.ts`, sharing its quad and nothing after that.** Both turn a
18
+ * segment into a camera-facing quad from `segmentQuads.ts`, because neither filament has a
19
+ * thickness to see around; a bolt is additive light with no model transform and a line is a
20
+ * fogged, alpha-blended thing in the world that moves with whatever it is attached to, hence
21
+ * the extra `uModel` field `LINE_VERT` carries and `BOLT_VERT` does not.
22
+ *
23
+ * The per-frame streams are two positions, not bolt's five — no `along`/`fade`/`seed`/
24
+ * `brightness` to carry, because a line has no envelope. `expandLineSegments` is written here
25
+ * rather than folded into `expandBoltSegments` in `segmentQuads.ts`, for the reason
26
+ * `lineBatch.ts` gives on the WebGL2 side: teaching that function a `LineSegments` shape too
27
+ * would grow a union coupling two renderers that share only a quad.
28
+ *
29
+ * **Uniforms are a `UniformRing`, one slot a draw, not a single block like `boltPass.ts`'s.**
30
+ * A bolt pool is drawn once a frame in every scene that has shipped so far, so a single block
31
+ * happened to be safe there; a polyline is exactly the shape `uniformRing.ts`'s own comment
32
+ * warns about — a waveform, several trails, a plotted curve, all in one frame — and
33
+ * `queue.writeBuffer` does not interleave with recorded draw commands, so a single block
34
+ * written more than once in a frame gives *every* draw that frame the last write. Found on
35
+ * this page's own demo, which draws seven polylines a frame: every stroke rendered at the last
36
+ * one's transform, colour and width, which on WebGPU alone put every shape at the last draw's
37
+ * position and looked exactly like nothing had rendered rather than like a transform bug — see
38
+ * `drawLines` in `webgpu/renderer.ts`.
39
+ */
40
+
41
+ export const LINE_VERT_FIELDS: UniformFields = LINE_BINDINGS.LINE_VERT.fields;
42
+ export const LINE_VERT_SIZE = LINE_BINDINGS.LINE_VERT.uniformSize;
43
+ export const LINE_FRAG_FIELDS: UniformFields = LINE_BINDINGS.LINE_FRAG.fields;
44
+ export const LINE_FRAG_SIZE = LINE_BINDINGS.LINE_FRAG.uniformSize;
45
+
46
+ const VERT_BINDING = LINE_BINDINGS.LINE_VERT.uniforms;
47
+ const FRAG_BINDING = LINE_BINDINGS.LINE_FRAG.uniforms;
48
+
49
+ const VISIBILITY_VERTEX = 0x1;
50
+ const VISIBILITY_FRAGMENT = 0x2;
51
+ const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
52
+ const USAGE_INDEX = 0x0010 | 0x0008; // INDEX | COPY_DST
53
+
54
+ /** A polyline batch on the device, behind the surface's opaque handle. */
55
+ export interface GpuLines {
56
+ readonly fromBuffer: GPUBuffer;
57
+ readonly toBuffer: GPUBuffer;
58
+ readonly corners: GPUBuffer;
59
+ readonly indices: GPUBuffer;
60
+ readonly capacity: number;
61
+ /** Staging, expanded from the segment list's per-segment arrays to per-vertex ones. */
62
+ readonly from: Float32Array;
63
+ readonly to: Float32Array;
64
+ dispose(): void;
65
+ }
66
+
67
+ export function createGpuLines(device: GPUDevice, capacity: number, label: string): GpuLines {
68
+ const verts = capacity * 4;
69
+ const geometry = buildSegmentQuads(capacity);
70
+
71
+ const dynamic = (floats: number, name: string): GPUBuffer =>
72
+ device.createBuffer({
73
+ label: `${label}.${name}`,
74
+ size: Math.max(4, floats * 4),
75
+ usage: USAGE_VERTEX,
76
+ });
77
+
78
+ const fromBuffer = dynamic(verts * 3, 'from');
79
+ const toBuffer = dynamic(verts * 3, 'to');
80
+
81
+ const corners = device.createBuffer({
82
+ label: `${label}.corners`,
83
+ size: Math.max(4, geometry.corners.byteLength),
84
+ usage: USAGE_VERTEX,
85
+ });
86
+ device.queue.writeBuffer(corners, 0, geometry.corners);
87
+
88
+ const indices = device.createBuffer({
89
+ label: `${label}.indices`,
90
+ size: Math.max(4, geometry.indices.byteLength),
91
+ usage: USAGE_INDEX,
92
+ });
93
+ device.queue.writeBuffer(indices, 0, geometry.indices);
94
+
95
+ return {
96
+ fromBuffer,
97
+ toBuffer,
98
+ corners,
99
+ indices,
100
+ capacity,
101
+ from: new Float32Array(verts * 3),
102
+ to: new Float32Array(verts * 3),
103
+ dispose(): void {
104
+ fromBuffer.destroy();
105
+ toBuffer.destroy();
106
+ corners.destroy();
107
+ indices.destroy();
108
+ },
109
+ };
110
+ }
111
+
112
+ /**
113
+ * Expand this frame's segments to their four vertices each, into arrays the caller owns.
114
+ *
115
+ * Returns how many segments were written, which is the list's count clamped to the batch's
116
+ * capacity — a caller that overruns loses its tail rather than its frame, the same rule
117
+ * `expandBoltSegments` follows. Reads only `LineSegments.from`/`.to`, the same walk `lineBatch.ts`
118
+ * writes inline in `upload()` on the WebGL2 side.
119
+ */
120
+ export function expandLineSegments(
121
+ data: LineSegments,
122
+ capacity: number,
123
+ from: Float32Array,
124
+ to: Float32Array,
125
+ ): number {
126
+ const count = Math.min(data.count, capacity);
127
+ for (let s = 0; s < count; s++) {
128
+ const fx = data.from[s * 3] as number;
129
+ const fy = data.from[s * 3 + 1] as number;
130
+ const fz = data.from[s * 3 + 2] as number;
131
+ const tx = data.to[s * 3] as number;
132
+ const ty = data.to[s * 3 + 1] as number;
133
+ const tz = data.to[s * 3 + 2] as number;
134
+ for (let c = 0; c < 4; c++) {
135
+ const v = s * 4 + c;
136
+ from[v * 3] = fx;
137
+ from[v * 3 + 1] = fy;
138
+ from[v * 3 + 2] = fz;
139
+ to[v * 3] = tx;
140
+ to[v * 3 + 1] = ty;
141
+ to[v * 3 + 2] = tz;
142
+ }
143
+ }
144
+ return count;
145
+ }
146
+
147
+ /** `aFrom`, `aTo`, `aCorner` — one buffer each, at the locations `line.ts` declares. No fourth
148
+ * dynamic attribute: unlike a bolt, a line carries no envelope. */
149
+ export function lineVertexLayouts(): GPUVertexBufferLayout[] {
150
+ return [
151
+ {
152
+ arrayStride: 12,
153
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' as GPUVertexFormat }],
154
+ },
155
+ {
156
+ arrayStride: 12,
157
+ attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x3' as GPUVertexFormat }],
158
+ },
159
+ {
160
+ arrayStride: 8,
161
+ attributes: [{ shaderLocation: 2, offset: 0, format: 'float32x2' as GPUVertexFormat }],
162
+ },
163
+ ];
164
+ }
165
+
166
+ /**
167
+ * `hasDynamicOffset: true` on both bindings, which the ring needs for the reason this file's own
168
+ * top comment gives.
169
+ *
170
+ * **This used to say "unlike `boltPass.ts`", and that stopped being true on 2026-09-02** when
171
+ * bolts, caustics, the flock and the wind streaks all gained rings of their own. A comment naming
172
+ * a neighbour's shortcoming is a comment that goes stale when the neighbour is fixed.
173
+ */
174
+ export function createLineBindGroupLayout(device: GPUDevice): GPUBindGroupLayout {
175
+ return device.createBindGroupLayout({
176
+ label: 'line.layout',
177
+ entries: [
178
+ {
179
+ binding: VERT_BINDING,
180
+ visibility: VISIBILITY_VERTEX,
181
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LINE_VERT_SIZE },
182
+ },
183
+ {
184
+ binding: FRAG_BINDING,
185
+ visibility: VISIBILITY_FRAGMENT,
186
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LINE_FRAG_SIZE },
187
+ },
188
+ ],
189
+ });
190
+ }
191
+
192
+ /** Bound once against the ring's two buffers; every draw supplies its own dynamic offset. */
193
+ export function createLineBindGroup(
194
+ device: GPUDevice,
195
+ layout: GPUBindGroupLayout,
196
+ vertices: GPUBuffer,
197
+ fragments: GPUBuffer,
198
+ ): GPUBindGroup {
199
+ return device.createBindGroup({
200
+ label: 'line.bindGroup',
201
+ layout,
202
+ entries: [
203
+ { binding: VERT_BINDING, resource: { buffer: vertices, size: LINE_VERT_SIZE } },
204
+ { binding: FRAG_BINDING, resource: { buffer: fragments, size: LINE_FRAG_SIZE } },
205
+ ],
206
+ });
207
+ }
208
+
209
+ /**
210
+ * The pipeline.
211
+ *
212
+ * **Alpha blended, depth tested, depth not written, nothing culled.** Alpha rather than
213
+ * `boltPipeline`'s additive, matching `LineBatch.drawTo`'s WebGL2 state exactly: a line occludes
214
+ * in colour but must not punch a hole in the depth buffer from its own soft antialiased edge,
215
+ * the same discipline the SDF text pass follows. Nothing culled for the reason `lineBatch.ts`
216
+ * gives: the quad billboards toward the view the same way a bolt's does, so its winding can flip
217
+ * with the camera angle.
218
+ */
219
+ export function linePipeline(
220
+ cache: PipelineCache,
221
+ device: GPUDevice,
222
+ layout: GPUBindGroupLayout,
223
+ /**
224
+ * Whether this stroke is *light arriving* rather than a thing in the world.
225
+ *
226
+ * **A second pipeline rather than a second verb, and it does not make a line a bolt.** Blending
227
+ * is pipeline state on this backend, so an additive stroke is a variant with its own cache key —
228
+ * the same arrangement `depthWrite` already has for a translucent mesh. What it is not is a mode
229
+ * flag turning `drawLines` into `drawBolts`: a bolt jitters along its own path because it is
230
+ * lightning, which is a fact about geometry that nothing here touches.
231
+ */
232
+ additive = false,
233
+ ): GPURenderPipeline {
234
+ return cache.get(additive ? 'line:additive' : 'line', () => ({
235
+ label: additive ? 'line.additive' : 'line',
236
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
237
+ vertex: {
238
+ module: shaderModule(device, { label: 'line.vert', code: LINE_VERT_WGSL }),
239
+ entryPoint: 'main',
240
+ buffers: lineVertexLayouts(),
241
+ },
242
+ fragment: {
243
+ module: shaderModule(device, { label: 'line.frag', code: LINE_FRAG_WGSL }),
244
+ entryPoint: 'main',
245
+ targets: [
246
+ {
247
+ format: cache.format,
248
+ /* The additive arm is `boltPass`'s exactly, because it is the same statement about the
249
+ same kind of thing: light adds to what is behind it and never covers it. */
250
+ blend: additive
251
+ ? {
252
+ color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
253
+ alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
254
+ }
255
+ : {
256
+ color: {
257
+ srcFactor: 'src-alpha',
258
+ dstFactor: 'one-minus-src-alpha',
259
+ operation: 'add',
260
+ },
261
+ alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
262
+ },
263
+ },
264
+ ],
265
+ },
266
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
267
+ multisample: { count: cache.sampleCount },
268
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
269
+ }));
270
+ }
@@ -0,0 +1,61 @@
1
+ import { morphTextureRows, morphTextureWidth } from '../../skinPalette.ts';
2
+
3
+ /**
4
+ * A mesh's morph deltas as an `rgba32float` texture, on WebGPU.
5
+ *
6
+ * The twin of the WebGL2 module of this name, and **`rgba` where that one is `rgb`**: WebGPU has
7
+ * no three-channel float format at all, so the fourth channel is padding the shader ignores. That
8
+ * is a quarter of the texture holding nothing, and it is the format list rather than a choice —
9
+ * naming it here so the difference between the two files is not read as an oversight.
10
+ */
11
+ export class MorphTexture {
12
+ private texture: GPUTexture | null = null;
13
+ private cachedView: GPUTextureView | null = null;
14
+ readonly width: number;
15
+ readonly rows: number;
16
+ readonly targetCount: number;
17
+
18
+ constructor(device: GPUDevice, deltas: Float32Array, vertices: number, targets: number) {
19
+ this.targetCount = targets;
20
+ this.width = morphTextureWidth(vertices, targets);
21
+ this.rows = morphTextureRows(vertices, targets);
22
+
23
+ this.texture = device.createTexture({
24
+ label: `morph.deltas:${targets}x${vertices}`,
25
+ size: { width: this.width, height: this.rows },
26
+ format: 'rgba32float',
27
+ usage: TEXTURE_USAGE.TEXTURE_BINDING | TEXTURE_USAGE.COPY_DST,
28
+ });
29
+
30
+ /* Three floats a delta widened to four, and padded to the full rectangle for the reason the
31
+ WebGL2 twin gives: a short last row is what an upload walks off the end of. */
32
+ const padded = new Float32Array(this.width * this.rows * 4);
33
+ const count = Math.min(deltas.length / 3, this.width * this.rows);
34
+ for (let i = 0; i < count; i++) {
35
+ padded[i * 4] = deltas[i * 3] as number;
36
+ padded[i * 4 + 1] = deltas[i * 3 + 1] as number;
37
+ padded[i * 4 + 2] = deltas[i * 3 + 2] as number;
38
+ }
39
+ device.queue.writeTexture(
40
+ { texture: this.texture },
41
+ padded,
42
+ { bytesPerRow: this.width * 16, rowsPerImage: this.rows },
43
+ { width: this.width, height: this.rows },
44
+ );
45
+ }
46
+
47
+ view(): GPUTextureView | null {
48
+ if (this.texture === null) return null;
49
+ if (this.cachedView === null) this.cachedView = this.texture.createView();
50
+ return this.cachedView;
51
+ }
52
+
53
+ dispose(): void {
54
+ this.texture?.destroy();
55
+ this.texture = null;
56
+ this.cachedView = null;
57
+ }
58
+ }
59
+
60
+ /* Spelled out, because the global is not in the TypeScript lib this package compiles against. */
61
+ const TEXTURE_USAGE = { COPY_DST: 0x02, TEXTURE_BINDING: 0x04 } as const;
@@ -0,0 +1,138 @@
1
+ import {
2
+ PANEL_BINDINGS,
3
+ PANEL_FRAG_WGSL,
4
+ PANEL_VERT_WGSL,
5
+ } from '../../shaders/generated/panel.wgsl.ts';
6
+ import type { UniformFields } from './scatterPass.ts';
7
+ import { DEPTH_FORMAT } from './flatPass.ts';
8
+ import type { PipelineCache } from './pipelineCache.ts';
9
+ import { shaderModule } from './shaderModules.ts';
10
+
11
+ /**
12
+ * The panel pass: two triangles in screen space, one colour, one alpha.
13
+ *
14
+ * The plain surface an overlay is read against — what `renderer.ts` says about `fillPanel`
15
+ * applies here unchanged, including why neither `beginInset` nor a plate of glyph cubes can
16
+ * stand in for it.
17
+ *
18
+ * **The corners are a vertex buffer rather than `vertex_index` arithmetic**, because the GLSL
19
+ * is the source of truth and it declares `aCorner`. Six vertices, uploaded once.
20
+ */
21
+
22
+ export const PANEL_VERT_FIELDS: UniformFields = PANEL_BINDINGS.PANEL_VERT.fields;
23
+ export const PANEL_VERT_SIZE = PANEL_BINDINGS.PANEL_VERT.uniformSize;
24
+ export const PANEL_FRAG_FIELDS: UniformFields = PANEL_BINDINGS.PANEL_FRAG.fields;
25
+ export const PANEL_FRAG_SIZE = PANEL_BINDINGS.PANEL_FRAG.uniformSize;
26
+
27
+ const VERT_BINDING = PANEL_BINDINGS.PANEL_VERT.uniforms;
28
+ const FRAG_BINDING = PANEL_BINDINGS.PANEL_FRAG.uniforms;
29
+
30
+ const VISIBILITY_VERTEX = 0x1;
31
+ const VISIBILITY_FRAGMENT = 0x2;
32
+ const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
33
+
34
+ /** The unit quad, as two triangles. The rect and the viewport turn it into pixels. */
35
+ const CORNERS = new Float32Array([0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]);
36
+ export const PANEL_VERTEX_COUNT = CORNERS.length / 2;
37
+
38
+ export function createPanelCorners(device: GPUDevice): GPUBuffer {
39
+ const buffer = device.createBuffer({
40
+ label: 'panel.corners',
41
+ size: CORNERS.byteLength,
42
+ usage: USAGE_VERTEX,
43
+ });
44
+ device.queue.writeBuffer(buffer, 0, CORNERS);
45
+ return buffer;
46
+ }
47
+
48
+ export function createPanelBindGroupLayout(device: GPUDevice): GPUBindGroupLayout {
49
+ return device.createBindGroupLayout({
50
+ label: 'panel.layout',
51
+ entries: [
52
+ {
53
+ binding: VERT_BINDING,
54
+ visibility: VISIBILITY_VERTEX,
55
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PANEL_VERT_SIZE },
56
+ },
57
+ {
58
+ binding: FRAG_BINDING,
59
+ visibility: VISIBILITY_FRAGMENT,
60
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PANEL_FRAG_SIZE },
61
+ },
62
+ ],
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Bound once against both rings, and addressed by dynamic offset per panel.
68
+ *
69
+ * **A ring rather than one buffer, because a frame draws more than one.** The loader alone
70
+ * draws a track and a fill, and `queue.writeBuffer` does not interleave with recorded commands
71
+ * — so a single block written twice would give both panels the second colour. That is the bug
72
+ * that left a flame leaning forty degrees in still air, one pass higher up.
73
+ */
74
+ export function createPanelBindGroup(
75
+ device: GPUDevice,
76
+ layout: GPUBindGroupLayout,
77
+ vertices: GPUBuffer,
78
+ fragments: GPUBuffer,
79
+ ): GPUBindGroup {
80
+ return device.createBindGroup({
81
+ label: 'panel.bindGroup',
82
+ layout,
83
+ entries: [
84
+ { binding: VERT_BINDING, resource: { buffer: vertices, size: PANEL_VERT_SIZE } },
85
+ { binding: FRAG_BINDING, resource: { buffer: fragments, size: PANEL_FRAG_SIZE } },
86
+ ],
87
+ });
88
+ }
89
+
90
+ /**
91
+ * The pipeline.
92
+ *
93
+ * **Nothing culled, nothing depth-tested, nothing written to depth.** This is furniture drawn
94
+ * over a finished frame: it must neither be occluded by the scene nor occlude what comes after
95
+ * it. `renderer.ts` disables all three by hand for the same draw, and records that leaving
96
+ * culling on drew nothing at all, silently — a screen-space quad has no meaningful facing.
97
+ */
98
+ export function panelPipeline(
99
+ cache: PipelineCache,
100
+ device: GPUDevice,
101
+ layout: GPUBindGroupLayout,
102
+ ): GPURenderPipeline {
103
+ return cache.get('panel', () => ({
104
+ label: 'panel',
105
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
106
+ vertex: {
107
+ module: shaderModule(device, { label: 'panel.vert', code: PANEL_VERT_WGSL }),
108
+ entryPoint: 'main',
109
+ buffers: [
110
+ {
111
+ arrayStride: 8,
112
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x2' as GPUVertexFormat }],
113
+ },
114
+ ],
115
+ },
116
+ fragment: {
117
+ module: shaderModule(device, { label: 'panel.frag', code: PANEL_FRAG_WGSL }),
118
+ entryPoint: 'main',
119
+ targets: [
120
+ {
121
+ format: cache.format,
122
+ blend: {
123
+ color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
124
+ alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
125
+ },
126
+ },
127
+ ],
128
+ },
129
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
130
+ multisample: { count: cache.sampleCount },
131
+ /*
132
+ * `always` is how a WebGPU pipeline says what `gl.disable(DEPTH_TEST)` says. The attachment
133
+ * is still declared because the frame's pass has one, and a pipeline that omits it cannot
134
+ * be used in a pass that has one.
135
+ */
136
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: 'always' },
137
+ }));
138
+ }