@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,95 @@
1
+ import type { MeshData } from '../../mesh.ts';
2
+ import type { PipelineCache } from './pipelineCache.ts';
3
+ /**
4
+ * The scatter pass: one base mesh drawn many times, deformed by wind in the vertex stage.
5
+ *
6
+ * **The first pass here that instances**, and the whole reason it is worth porting early: a
7
+ * field of grass is tens of thousands of copies of a few triangles, and everything else this
8
+ * backend draws is one copy of one mesh. The WebGPU shape of it is `stepMode: 'instance'` on
9
+ * a vertex buffer, which is `vertexAttribDivisor(location, 1)` with the divisor moved from
10
+ * the attribute to the buffer that carries it.
11
+ */
12
+ /** One field's place in the block, as the generator recorded it. See `flatPass.StageBindings`. */
13
+ export type UniformFields = Readonly<Record<string, {
14
+ readonly offset: number;
15
+ readonly size: number;
16
+ readonly length?: number;
17
+ readonly stride?: number;
18
+ }>>;
19
+ export declare const SCATTER_DEPTH_FIELDS: UniformFields;
20
+ export declare const SCATTER_DEPTH_SIZE: 240;
21
+ export declare const SCATTER_VERT_FIELDS: UniformFields;
22
+ export declare const SCATTER_VERT_SIZE: 240;
23
+ export declare const SCATTER_FRAG_FIELDS: UniformFields;
24
+ export declare const SCATTER_FRAG_SIZE: 128;
25
+ export declare function scatterVertexLayouts(): GPUVertexBufferLayout[];
26
+ /** Geometry and placement on the device, behind the opaque handle the surface hands out. */
27
+ export interface GpuScatter {
28
+ readonly vertexBuffers: readonly GPUBuffer[];
29
+ readonly indexBuffer: GPUBuffer;
30
+ readonly indexCount: number;
31
+ /** How many instances the per-instance buffers were sized for. */
32
+ readonly capacity: number;
33
+ dispose(): void;
34
+ }
35
+ /**
36
+ * Upload a base mesh and size the per-instance buffers.
37
+ *
38
+ * **Sized to capacity now and rewritten later**, matching `InstancedMesh`: growing a buffer
39
+ * mid-frame is a stall, and a scatter's capacity is known when it is built.
40
+ */
41
+ export declare function createGpuScatter(device: GPUDevice, base: MeshData, capacity: number): GpuScatter;
42
+ export declare function createScatterBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
43
+ export declare function createScatterBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, perPass: GPUBuffer, perFrame: GPUBuffer): GPUBindGroup;
44
+ /**
45
+ * The scatter *depth* pipeline: the same blades, bent the same way, into the shadow map.
46
+ *
47
+ * **It has to be the same deformation or the shadow comes loose from its caster.** The
48
+ * vertex stage is `SCATTER_DEPTH_VERT` rather than the frame's, but it reads the same wind
49
+ * block at the same offsets, so the two are fed from one `resolveScatterDeform`. A blade
50
+ * bent by one gust and shadowed by another is the failure this pairing exists to prevent —
51
+ * and it is why `ShadowCasterSink.scatter` takes the gust rather than looking it up.
52
+ *
53
+ * Paired with `DEPTH_FRAG`, exactly as `renderer.ts` pairs `scatterDepthProgram`.
54
+ *
55
+ * Single-sampled and no colour target: the shadow map is neither multisampled nor presented.
56
+ */
57
+ export declare function scatterDepthPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, shadowFormat: GPUTextureFormat, depthFragment: string): GPURenderPipeline;
58
+ /**
59
+ * The scatter pipeline.
60
+ *
61
+ * **Culling off, matching `renderer.ts`.** It brackets the scatter draw with
62
+ * `gl.disable(gl.CULL_FACE)`, because a blade of grass is a flat card with no back: cull it
63
+ * and half the field vanishes depending on which way the wind turned it.
64
+ */
65
+ export declare function scatterPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
66
+ /**
67
+ * The layout the scatter depth pass binds against.
68
+ *
69
+ * The vertex block is the scatter one — wind and trample — and the fragment block and its
70
+ * previous-map sampler are the depth pass's own, unchanged, because the peel layer works the
71
+ * same way whatever geometry is filling it.
72
+ *
73
+ * **`hasDynamicOffset` on the vertex block, and it is a bug fix rather than a shape.** That
74
+ * block used to be one buffer rewritten before every batch, which is the failure `UniformRing`
75
+ * exists for: writes are ordered on the queue timeline and the encoder is submitted afterwards,
76
+ * so every scatter draw recorded before that submit reads the *last* write. Inside one
77
+ * directional layer that costs a batch the wrong gust. Inside a point light's bake it costs the
78
+ * wrong `uLightViewProj`, because six cube faces share one encoder — so a field of grass was
79
+ * rasterised into all six faces under the last face's projection, and five sixths of it landed
80
+ * in the octahedral map at directions nothing occupies. What that draws is a hard-edged patch of
81
+ * shadow on the ground beside a lamp with nothing above it to cast one.
82
+ */
83
+ export declare function createScatterDepthBindGroupLayout(device: GPUDevice, fragBinding: number, fragSize: number, previous: {
84
+ texture: number;
85
+ sampler: number;
86
+ }): GPUBindGroupLayout;
87
+ /** `perDraw` is a `UniformRing`'s buffer now, bound one slot at a time. See the layout above. */
88
+ export declare function createScatterDepthBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, perDraw: GPUBuffer, frag: {
89
+ binding: number;
90
+ buffer: GPUBuffer;
91
+ size: number;
92
+ }, previous: {
93
+ texture: number;
94
+ sampler: number;
95
+ }, view: GPUTextureView, sampler: GPUSampler): GPUBindGroup;
@@ -0,0 +1,266 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.js';
2
+ import { SCATTER_BINDINGS, SCATTER_DEPTH_VERT_WGSL, SCATTER_FRAG_WGSL, SCATTER_VERT_WGSL, } from '../../shaders/generated/scatter.wgsl.js';
3
+ import { DEPTH_FORMAT } from './flatPass.js';
4
+ import { shaderModule } from './shaderModules.js';
5
+ /*
6
+ * Widened once here, for the reason `flatPass.ts` gives: the generated file is `as const`, so
7
+ * every field is its own literal type and indexing it by a computed name is an error. Checked
8
+ * against the real object rather than asserted about it — a generator that stopped emitting
9
+ * `offset` would fail on this line.
10
+ */
11
+ export const SCATTER_DEPTH_FIELDS = SCATTER_BINDINGS.SCATTER_DEPTH_VERT.fields;
12
+ export const SCATTER_DEPTH_SIZE = SCATTER_BINDINGS.SCATTER_DEPTH_VERT.uniformSize;
13
+ export const SCATTER_VERT_FIELDS = SCATTER_BINDINGS.SCATTER_VERT.fields;
14
+ export const SCATTER_VERT_SIZE = SCATTER_BINDINGS.SCATTER_VERT.uniformSize;
15
+ export const SCATTER_FRAG_FIELDS = SCATTER_BINDINGS.SCATTER_FRAG.fields;
16
+ export const SCATTER_FRAG_SIZE = SCATTER_BINDINGS.SCATTER_FRAG.uniformSize;
17
+ const VERT_BINDING = SCATTER_BINDINGS.SCATTER_VERT.uniforms;
18
+ const FRAG_BINDING = SCATTER_BINDINGS.SCATTER_FRAG.uniforms;
19
+ const VISIBILITY_VERTEX = 0x1;
20
+ const VISIBILITY_FRAGMENT = 0x2;
21
+ /** Buffer usage: VERTEX | COPY_DST, and INDEX | COPY_DST. See `buffers.ts`. */
22
+ const USAGE_VERTEX = 0x0020 | 0x0008;
23
+ const USAGE_INDEX = 0x0010 | 0x0008;
24
+ /**
25
+ * How the seven attributes are laid out, one buffer each.
26
+ *
27
+ * **Seven buffers rather than the two `flat` uses, and that is affordable here.**
28
+ * `maxVertexBuffers` is eight; `flat` interleaves because it declares ten attributes and
29
+ * would not fit. Seven does, and one buffer per attribute is what `InstancedMesh` already
30
+ * holds on the other backend, so the upload paths stay the same shape.
31
+ *
32
+ * The last four step per *instance*. That is the entire difference between a field of grass
33
+ * and one blade drawn tens of thousands of times in the same place.
34
+ */
35
+ const ATTRIBUTES = [
36
+ { location: 0, floats: 3, perInstance: false },
37
+ { location: 1, floats: 3, perInstance: false },
38
+ { location: 2, floats: 3, perInstance: false },
39
+ { location: 3, floats: 3, perInstance: true },
40
+ { location: 4, floats: 2, perInstance: true },
41
+ { location: 5, floats: 3, perInstance: true },
42
+ { location: 6, floats: 3, perInstance: true },
43
+ ];
44
+ const FORMATS = {
45
+ 2: 'float32x2',
46
+ 3: 'float32x3',
47
+ };
48
+ export function scatterVertexLayouts() {
49
+ return ATTRIBUTES.map((attribute) => ({
50
+ arrayStride: attribute.floats * 4,
51
+ stepMode: attribute.perInstance ? 'instance' : 'vertex',
52
+ attributes: [
53
+ {
54
+ shaderLocation: attribute.location,
55
+ offset: 0,
56
+ format: FORMATS[attribute.floats],
57
+ },
58
+ ],
59
+ }));
60
+ }
61
+ /**
62
+ * Upload a base mesh and size the per-instance buffers.
63
+ *
64
+ * **Sized to capacity now and rewritten later**, matching `InstancedMesh`: growing a buffer
65
+ * mid-frame is a stall, and a scatter's capacity is known when it is built.
66
+ */
67
+ export function createGpuScatter(device, base, capacity) {
68
+ const buffers = [];
69
+ const upload = (data, label) => {
70
+ const buffer = device.createBuffer({
71
+ label,
72
+ size: Math.max(4, data.byteLength),
73
+ usage: USAGE_VERTEX,
74
+ });
75
+ device.queue.writeBuffer(buffer, 0, data);
76
+ buffers.push(buffer);
77
+ return buffer;
78
+ };
79
+ upload(base.positions, 'scatter.positions');
80
+ upload(base.normals, 'scatter.normals');
81
+ upload(base.colors, 'scatter.colors');
82
+ for (const attribute of ATTRIBUTES.filter((a) => a.perInstance)) {
83
+ const buffer = device.createBuffer({
84
+ label: `scatter.instance${attribute.location}`,
85
+ size: Math.max(4, capacity * attribute.floats * 4),
86
+ usage: USAGE_VERTEX,
87
+ });
88
+ buffers.push(buffer);
89
+ }
90
+ const indexBuffer = device.createBuffer({
91
+ label: 'scatter.indices',
92
+ size: Math.max(4, base.indices.byteLength),
93
+ usage: USAGE_INDEX,
94
+ });
95
+ device.queue.writeBuffer(indexBuffer, 0, base.indices);
96
+ return {
97
+ vertexBuffers: buffers,
98
+ indexBuffer,
99
+ indexCount: base.indices.length,
100
+ capacity,
101
+ dispose() {
102
+ for (const buffer of buffers)
103
+ buffer.destroy();
104
+ indexBuffer.destroy();
105
+ },
106
+ };
107
+ }
108
+ export function createScatterBindGroupLayout(device) {
109
+ return device.createBindGroupLayout({
110
+ label: 'scatter.layout',
111
+ entries: [
112
+ /*
113
+ * **The vertex block is per draw and the fragment block is not.**
114
+ *
115
+ * The vertex block carries the gust and the trample field, and both arrive as arguments
116
+ * to `drawScatter` — so a scene bending its grass by one press field and its canopy by
117
+ * another gets whichever was written last for both, from a single buffer. That is not
118
+ * hypothetical elsewhere: the plume pass had exactly this and drew a flame bent by the
119
+ * smoke's wind response. The demo that exercises this today happens to pass both
120
+ * batches the same wind and no trample, which is luck rather than a guarantee.
121
+ *
122
+ * The fragment block holds the camera, the sun, the point lights and the medium, which
123
+ * are settled per pass rather than per batch. It stops being safe the day something
124
+ * per-batch is added to it, and that is what would make this a ring too.
125
+ */
126
+ {
127
+ binding: VERT_BINDING,
128
+ visibility: VISIBILITY_VERTEX,
129
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: SCATTER_VERT_SIZE },
130
+ },
131
+ {
132
+ binding: FRAG_BINDING,
133
+ visibility: VISIBILITY_FRAGMENT,
134
+ buffer: { type: 'uniform', minBindingSize: SCATTER_FRAG_SIZE },
135
+ },
136
+ ],
137
+ });
138
+ }
139
+ export function createScatterBindGroup(device, layout, perPass, perFrame) {
140
+ return device.createBindGroup({
141
+ label: 'scatter.bindGroup',
142
+ layout,
143
+ entries: [
144
+ { binding: VERT_BINDING, resource: { buffer: perPass, size: SCATTER_VERT_SIZE } },
145
+ { binding: FRAG_BINDING, resource: { buffer: perFrame, size: SCATTER_FRAG_SIZE } },
146
+ ],
147
+ });
148
+ }
149
+ /**
150
+ * The scatter *depth* pipeline: the same blades, bent the same way, into the shadow map.
151
+ *
152
+ * **It has to be the same deformation or the shadow comes loose from its caster.** The
153
+ * vertex stage is `SCATTER_DEPTH_VERT` rather than the frame's, but it reads the same wind
154
+ * block at the same offsets, so the two are fed from one `resolveScatterDeform`. A blade
155
+ * bent by one gust and shadowed by another is the failure this pairing exists to prevent —
156
+ * and it is why `ShadowCasterSink.scatter` takes the gust rather than looking it up.
157
+ *
158
+ * Paired with `DEPTH_FRAG`, exactly as `renderer.ts` pairs `scatterDepthProgram`.
159
+ *
160
+ * Single-sampled and no colour target: the shadow map is neither multisampled nor presented.
161
+ */
162
+ export function scatterDepthPipeline(cache, device, layout, shadowFormat, depthFragment) {
163
+ return cache.get('scatter.depth', () => ({
164
+ label: 'scatter.depth',
165
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
166
+ vertex: {
167
+ module: shaderModule(device, {
168
+ label: 'scatter.depthVert',
169
+ code: SCATTER_DEPTH_VERT_WGSL,
170
+ }),
171
+ entryPoint: 'main',
172
+ buffers: scatterVertexLayouts(),
173
+ },
174
+ fragment: {
175
+ module: shaderModule(device, { label: 'depth.frag', code: depthFragment }),
176
+ entryPoint: 'main',
177
+ targets: [],
178
+ },
179
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
180
+ depthStencil: { format: shadowFormat, depthWriteEnabled: true, depthCompare: DEPTH_COMPARE },
181
+ }));
182
+ }
183
+ /**
184
+ * The scatter pipeline.
185
+ *
186
+ * **Culling off, matching `renderer.ts`.** It brackets the scatter draw with
187
+ * `gl.disable(gl.CULL_FACE)`, because a blade of grass is a flat card with no back: cull it
188
+ * and half the field vanishes depending on which way the wind turned it.
189
+ */
190
+ export function scatterPipeline(cache, device, layout) {
191
+ return cache.get('scatter', () => ({
192
+ label: 'scatter',
193
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
194
+ vertex: {
195
+ module: shaderModule(device, { label: 'scatter.vert', code: SCATTER_VERT_WGSL }),
196
+ entryPoint: 'main',
197
+ buffers: scatterVertexLayouts(),
198
+ },
199
+ fragment: {
200
+ module: shaderModule(device, { label: 'scatter.frag', code: SCATTER_FRAG_WGSL }),
201
+ entryPoint: 'main',
202
+ targets: [{ format: cache.format }],
203
+ },
204
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
205
+ multisample: { count: cache.sampleCount },
206
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: true, depthCompare: DEPTH_COMPARE },
207
+ }));
208
+ }
209
+ /**
210
+ * The layout the scatter depth pass binds against.
211
+ *
212
+ * The vertex block is the scatter one — wind and trample — and the fragment block and its
213
+ * previous-map sampler are the depth pass's own, unchanged, because the peel layer works the
214
+ * same way whatever geometry is filling it.
215
+ *
216
+ * **`hasDynamicOffset` on the vertex block, and it is a bug fix rather than a shape.** That
217
+ * block used to be one buffer rewritten before every batch, which is the failure `UniformRing`
218
+ * exists for: writes are ordered on the queue timeline and the encoder is submitted afterwards,
219
+ * so every scatter draw recorded before that submit reads the *last* write. Inside one
220
+ * directional layer that costs a batch the wrong gust. Inside a point light's bake it costs the
221
+ * wrong `uLightViewProj`, because six cube faces share one encoder — so a field of grass was
222
+ * rasterised into all six faces under the last face's projection, and five sixths of it landed
223
+ * in the octahedral map at directions nothing occupies. What that draws is a hard-edged patch of
224
+ * shadow on the ground beside a lamp with nothing above it to cast one.
225
+ */
226
+ export function createScatterDepthBindGroupLayout(device, fragBinding, fragSize, previous) {
227
+ return device.createBindGroupLayout({
228
+ label: 'scatter.depthLayout',
229
+ entries: [
230
+ {
231
+ binding: VERT_BINDING,
232
+ visibility: VISIBILITY_VERTEX,
233
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: SCATTER_DEPTH_SIZE },
234
+ },
235
+ {
236
+ binding: fragBinding,
237
+ visibility: VISIBILITY_FRAGMENT,
238
+ buffer: { type: 'uniform', minBindingSize: fragSize },
239
+ },
240
+ /* A depth format, for the reason `depthPass.ts` spells out over its own copy of this. */
241
+ {
242
+ binding: previous.texture,
243
+ visibility: VISIBILITY_FRAGMENT,
244
+ texture: { sampleType: 'unfilterable-float' },
245
+ },
246
+ {
247
+ binding: previous.sampler,
248
+ visibility: VISIBILITY_FRAGMENT,
249
+ sampler: { type: 'non-filtering' },
250
+ },
251
+ ],
252
+ });
253
+ }
254
+ /** `perDraw` is a `UniformRing`'s buffer now, bound one slot at a time. See the layout above. */
255
+ export function createScatterDepthBindGroup(device, layout, perDraw, frag, previous, view, sampler) {
256
+ return device.createBindGroup({
257
+ label: 'scatter.depthBindGroup',
258
+ layout,
259
+ entries: [
260
+ { binding: VERT_BINDING, resource: { buffer: perDraw, size: SCATTER_DEPTH_SIZE } },
261
+ { binding: frag.binding, resource: { buffer: frag.buffer, size: frag.size } },
262
+ { binding: previous.texture, resource: view },
263
+ { binding: previous.sampler, resource: sampler },
264
+ ],
265
+ });
266
+ }
@@ -0,0 +1,86 @@
1
+ import type { UniformFields } from './scatterPass.ts';
2
+ import type { PipelineCache } from './pipelineCache.ts';
3
+ import type { SdfFont } from '../../sdfFont.ts';
4
+ import { SdfTextLayout, type SdfTextStyle } from '../../sdfTextLayout.ts';
5
+ import type { GpuSurfaceTexture } from './surfaceTexturePass.ts';
6
+ /**
7
+ * The SDF text pass: a string as flat, textured quads, drawn into the scene.
8
+ *
9
+ * Same job as `textPass.ts` for the engine's pixel font, and `sdfTextRenderer.ts`'s own class
10
+ * comment gives the reason this shape differs from that one: a distance field is sampled by
11
+ * the fragment shader, so a quad per glyph is the whole glyph — one indexed draw per string,
12
+ * no per-instance stepping. The layout is `sdfTextLayout.ts`'s and is shared with WebGL2; this
13
+ * owns only the buffers, the bind group and the pipeline.
14
+ *
15
+ * **World geometry, not a screen overlay — unlike `GpuText`.** It draws against the frame's
16
+ * own view-projection inside whatever pass is already open, the same one `drawMesh` uses, so
17
+ * it needs neither a pass of its own nor `openTextPass`'s depth clear. See `drawSdfText` in
18
+ * `webgpu/renderer.ts` for what that means for where this is called from.
19
+ */
20
+ export declare const SDF_TEXT_VERT_FIELDS: UniformFields;
21
+ export declare const SDF_TEXT_VERT_SIZE: 128;
22
+ export declare const SDF_TEXT_FRAG_FIELDS: UniformFields;
23
+ export declare const SDF_TEXT_FRAG_SIZE: 48;
24
+ /**
25
+ * One SDF text object on the device: the layout, and the three buffers it fills.
26
+ *
27
+ * **A plain indexed quad list, not `GpuText`'s instanced cube** — see this file's own doc
28
+ * comment. `positions`/`uvs` are re-uploaded only when `layout.set` says something moved,
29
+ * matching `SdfTextRenderer.upload`'s skip on the other backend; `indices` never changes after
30
+ * construction, matching `SdfTextLayout`'s own fixed `0,1,2,0,2,3` pattern.
31
+ */
32
+ export declare class GpuSdfText {
33
+ private readonly device;
34
+ readonly layout: SdfTextLayout;
35
+ readonly positions: GPUBuffer;
36
+ readonly uvs: GPUBuffer;
37
+ readonly indices: GPUBuffer;
38
+ /** Set by `setText`; `drawSdfText` reads neither this class nor the atlas from anywhere else. */
39
+ font: SdfFont | null;
40
+ atlas: GpuSurfaceTexture | null;
41
+ constructor(device: GPUDevice);
42
+ /**
43
+ * Lay a string out against a font, and retain the atlas `drawSdfText` will sample.
44
+ *
45
+ * The engine fetches nothing: `font` was parsed from a metrics document the caller already
46
+ * had, and `atlas` is a `GpuSurfaceTexture` the caller already uploaded. A no-op, and no
47
+ * re-upload, when neither the text nor the style moved — see `SdfTextLayout.set`.
48
+ */
49
+ setText(font: SdfFont, atlas: GpuSurfaceTexture, text: string, style: SdfTextStyle): void;
50
+ dispose(): void;
51
+ /** Both vertex buffers, from the arrays `layout.set` filled in place — the live prefix only. */
52
+ private upload;
53
+ }
54
+ /**
55
+ * `aPosition` at location 0, `aUv` at location 1 — pinned in `sdfText.ts` and read verbatim
56
+ * here rather than guessed, for the reason `sdfTextRenderer.ts`'s class comment gives. Neither
57
+ * is instanced: every vertex is its own quad corner, unlike `textVertexLayouts`'s per-instance
58
+ * cell and character.
59
+ */
60
+ export declare function sdfTextVertexLayouts(): GPUVertexBufferLayout[];
61
+ /**
62
+ * Built from `SDFTEXT_BINDINGS`, not hand-numbered — the generator emits bindings per shader
63
+ * precisely so this always binds the numbers the shader actually declared.
64
+ */
65
+ export declare function createSdfTextBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
66
+ /**
67
+ * Bound once per atlas against both rings; a dynamic offset per string. See
68
+ * `createTextBindGroup` and, for why one bind group serves every draw against the same atlas,
69
+ * `webgpu/renderer.ts`'s `albedoBindGroups`.
70
+ */
71
+ export declare function createSdfTextBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer, atlasView: GPUTextureView, atlasSampler: GPUSampler): GPUBindGroup;
72
+ /**
73
+ * The pipeline.
74
+ *
75
+ * **Alpha over, depth tested, depth not written — matching `filmPipeline`, not `textPipeline`.**
76
+ * `sdfTextRenderer.ts`'s own comment gives the reason: an SDF glyph's antialiased edge is
77
+ * coverage, not a solid surface, and writing depth from it punches a hole in whatever sits
78
+ * behind that edge. Depth *testing* is left at the pass's own ambient state rather than
79
+ * reasserted, the same assumption `drawTranslucentMesh` makes for the same reason — this draws
80
+ * inside the mesh pass, not a pass of its own.
81
+ *
82
+ * **Back faces culled**, matching the ambient state `bindMeshPass` sets for the whole mesh
83
+ * pass on the other backend (`gl.enable(CULL_FACE); gl.cullFace(BACK)`) and the convention
84
+ * `filmPipeline` already uses for ordinary world geometry drawn the same way.
85
+ */
86
+ export declare function sdfTextPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
@@ -0,0 +1,190 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.js';
2
+ import { SDFTEXT_BINDINGS, SDF_TEXT_FRAG_WGSL, SDF_TEXT_VERT_WGSL, } from '../../shaders/generated/sdfText.wgsl.js';
3
+ import { DEPTH_FORMAT } from './flatPass.js';
4
+ import { SdfTextLayout } from '../../sdfTextLayout.js';
5
+ import { shaderModule } from './shaderModules.js';
6
+ /**
7
+ * The SDF text pass: a string as flat, textured quads, drawn into the scene.
8
+ *
9
+ * Same job as `textPass.ts` for the engine's pixel font, and `sdfTextRenderer.ts`'s own class
10
+ * comment gives the reason this shape differs from that one: a distance field is sampled by
11
+ * the fragment shader, so a quad per glyph is the whole glyph — one indexed draw per string,
12
+ * no per-instance stepping. The layout is `sdfTextLayout.ts`'s and is shared with WebGL2; this
13
+ * owns only the buffers, the bind group and the pipeline.
14
+ *
15
+ * **World geometry, not a screen overlay — unlike `GpuText`.** It draws against the frame's
16
+ * own view-projection inside whatever pass is already open, the same one `drawMesh` uses, so
17
+ * it needs neither a pass of its own nor `openTextPass`'s depth clear. See `drawSdfText` in
18
+ * `webgpu/renderer.ts` for what that means for where this is called from.
19
+ */
20
+ export const SDF_TEXT_VERT_FIELDS = SDFTEXT_BINDINGS.SDF_TEXT_VERT.fields;
21
+ export const SDF_TEXT_VERT_SIZE = SDFTEXT_BINDINGS.SDF_TEXT_VERT.uniformSize;
22
+ export const SDF_TEXT_FRAG_FIELDS = SDFTEXT_BINDINGS.SDF_TEXT_FRAG.fields;
23
+ export const SDF_TEXT_FRAG_SIZE = SDFTEXT_BINDINGS.SDF_TEXT_FRAG.uniformSize;
24
+ const VERT_BINDING = SDFTEXT_BINDINGS.SDF_TEXT_VERT.uniforms;
25
+ const FRAG_BINDING = SDFTEXT_BINDINGS.SDF_TEXT_FRAG.uniforms;
26
+ const ATLAS = SDFTEXT_BINDINGS.SDF_TEXT_FRAG.textures.uAtlas;
27
+ const VISIBILITY_VERTEX = 0x1;
28
+ const VISIBILITY_FRAGMENT = 0x2;
29
+ const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
30
+ const USAGE_INDEX = 0x0010 | 0x0008; // INDEX | COPY_DST
31
+ /**
32
+ * One SDF text object on the device: the layout, and the three buffers it fills.
33
+ *
34
+ * **A plain indexed quad list, not `GpuText`'s instanced cube** — see this file's own doc
35
+ * comment. `positions`/`uvs` are re-uploaded only when `layout.set` says something moved,
36
+ * matching `SdfTextRenderer.upload`'s skip on the other backend; `indices` never changes after
37
+ * construction, matching `SdfTextLayout`'s own fixed `0,1,2,0,2,3` pattern.
38
+ */
39
+ export class GpuSdfText {
40
+ device;
41
+ layout = new SdfTextLayout();
42
+ positions;
43
+ uvs;
44
+ indices;
45
+ /** Set by `setText`; `drawSdfText` reads neither this class nor the atlas from anywhere else. */
46
+ font = null;
47
+ atlas = null;
48
+ constructor(device) {
49
+ this.device = device;
50
+ this.positions = device.createBuffer({
51
+ label: 'sdfText.positions',
52
+ size: this.layout.positions.byteLength,
53
+ usage: USAGE_VERTEX,
54
+ });
55
+ this.uvs = device.createBuffer({
56
+ label: 'sdfText.uvs',
57
+ size: this.layout.uvs.byteLength,
58
+ usage: USAGE_VERTEX,
59
+ });
60
+ this.indices = device.createBuffer({
61
+ label: 'sdfText.indices',
62
+ size: this.layout.indices.byteLength,
63
+ usage: USAGE_INDEX,
64
+ });
65
+ device.queue.writeBuffer(this.indices, 0, this.layout.indices);
66
+ }
67
+ /**
68
+ * Lay a string out against a font, and retain the atlas `drawSdfText` will sample.
69
+ *
70
+ * The engine fetches nothing: `font` was parsed from a metrics document the caller already
71
+ * had, and `atlas` is a `GpuSurfaceTexture` the caller already uploaded. A no-op, and no
72
+ * re-upload, when neither the text nor the style moved — see `SdfTextLayout.set`.
73
+ */
74
+ setText(font, atlas, text, style) {
75
+ this.font = font;
76
+ this.atlas = atlas;
77
+ if (this.layout.set(font, text, style))
78
+ this.upload();
79
+ }
80
+ dispose() {
81
+ this.positions.destroy();
82
+ this.uvs.destroy();
83
+ this.indices.destroy();
84
+ }
85
+ /** Both vertex buffers, from the arrays `layout.set` filled in place — the live prefix only. */
86
+ upload() {
87
+ const vertexCount = this.layout.quadCount * 4;
88
+ this.device.queue.writeBuffer(this.positions, 0, this.layout.positions, 0, vertexCount * 3);
89
+ this.device.queue.writeBuffer(this.uvs, 0, this.layout.uvs, 0, vertexCount * 2);
90
+ }
91
+ }
92
+ /**
93
+ * `aPosition` at location 0, `aUv` at location 1 — pinned in `sdfText.ts` and read verbatim
94
+ * here rather than guessed, for the reason `sdfTextRenderer.ts`'s class comment gives. Neither
95
+ * is instanced: every vertex is its own quad corner, unlike `textVertexLayouts`'s per-instance
96
+ * cell and character.
97
+ */
98
+ export function sdfTextVertexLayouts() {
99
+ return [
100
+ {
101
+ arrayStride: 12,
102
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
103
+ },
104
+ {
105
+ arrayStride: 8,
106
+ attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x2' }],
107
+ },
108
+ ];
109
+ }
110
+ /**
111
+ * Built from `SDFTEXT_BINDINGS`, not hand-numbered — the generator emits bindings per shader
112
+ * precisely so this always binds the numbers the shader actually declared.
113
+ */
114
+ export function createSdfTextBindGroupLayout(device) {
115
+ return device.createBindGroupLayout({
116
+ label: 'sdfText.layout',
117
+ entries: [
118
+ {
119
+ binding: VERT_BINDING,
120
+ visibility: VISIBILITY_VERTEX,
121
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: SDF_TEXT_VERT_SIZE },
122
+ },
123
+ {
124
+ binding: FRAG_BINDING,
125
+ visibility: VISIBILITY_FRAGMENT,
126
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: SDF_TEXT_FRAG_SIZE },
127
+ },
128
+ { binding: ATLAS.texture, visibility: VISIBILITY_FRAGMENT, texture: {} },
129
+ { binding: ATLAS.sampler, visibility: VISIBILITY_FRAGMENT, sampler: {} },
130
+ ],
131
+ });
132
+ }
133
+ /**
134
+ * Bound once per atlas against both rings; a dynamic offset per string. See
135
+ * `createTextBindGroup` and, for why one bind group serves every draw against the same atlas,
136
+ * `webgpu/renderer.ts`'s `albedoBindGroups`.
137
+ */
138
+ export function createSdfTextBindGroup(device, layout, vertices, fragments, atlasView, atlasSampler) {
139
+ return device.createBindGroup({
140
+ label: 'sdfText.bindGroup',
141
+ layout,
142
+ entries: [
143
+ { binding: VERT_BINDING, resource: { buffer: vertices, size: SDF_TEXT_VERT_SIZE } },
144
+ { binding: FRAG_BINDING, resource: { buffer: fragments, size: SDF_TEXT_FRAG_SIZE } },
145
+ { binding: ATLAS.texture, resource: atlasView },
146
+ { binding: ATLAS.sampler, resource: atlasSampler },
147
+ ],
148
+ });
149
+ }
150
+ /**
151
+ * The pipeline.
152
+ *
153
+ * **Alpha over, depth tested, depth not written — matching `filmPipeline`, not `textPipeline`.**
154
+ * `sdfTextRenderer.ts`'s own comment gives the reason: an SDF glyph's antialiased edge is
155
+ * coverage, not a solid surface, and writing depth from it punches a hole in whatever sits
156
+ * behind that edge. Depth *testing* is left at the pass's own ambient state rather than
157
+ * reasserted, the same assumption `drawTranslucentMesh` makes for the same reason — this draws
158
+ * inside the mesh pass, not a pass of its own.
159
+ *
160
+ * **Back faces culled**, matching the ambient state `bindMeshPass` sets for the whole mesh
161
+ * pass on the other backend (`gl.enable(CULL_FACE); gl.cullFace(BACK)`) and the convention
162
+ * `filmPipeline` already uses for ordinary world geometry drawn the same way.
163
+ */
164
+ export function sdfTextPipeline(cache, device, layout) {
165
+ return cache.get('sdfText', () => ({
166
+ label: 'sdfText',
167
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
168
+ vertex: {
169
+ module: shaderModule(device, { label: 'sdfText.vert', code: SDF_TEXT_VERT_WGSL }),
170
+ entryPoint: 'main',
171
+ buffers: sdfTextVertexLayouts(),
172
+ },
173
+ fragment: {
174
+ module: shaderModule(device, { label: 'sdfText.frag', code: SDF_TEXT_FRAG_WGSL }),
175
+ entryPoint: 'main',
176
+ targets: [
177
+ {
178
+ format: cache.format,
179
+ blend: {
180
+ color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
181
+ alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
182
+ },
183
+ },
184
+ ],
185
+ },
186
+ primitive: { topology: 'triangle-list', cullMode: 'back' },
187
+ multisample: { count: cache.sampleCount },
188
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
189
+ }));
190
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The module for this source, compiling it on the first ask only.
3
+ *
4
+ * A drop-in for `device.createShaderModule(descriptor)`, and deliberately the same shape so a
5
+ * call site reads the same after the change as before it.
6
+ */
7
+ export declare function shaderModule(device: GPUDevice, descriptor: GPUShaderModuleDescriptor): GPUShaderModule;
8
+ /** How many distinct sources this device has compiled. Read by tests and diagnostics. */
9
+ export declare function shaderModuleCount(device: GPUDevice): number;