@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,77 @@
1
+ /**
2
+ * An SDF font's metrics, parsed once and asked many times.
3
+ *
4
+ * The atlas image is the consumer's business — it arrives as a `TexImageSource` like every
5
+ * other texture this engine takes, and the engine still fetches nothing. This owns only
6
+ * the numbers that turn a string into quads.
7
+ */
8
+ export interface SdfGlyph {
9
+ readonly advance: number;
10
+ /** The glyph's ink box in font units, y-up: `planeTop` is above `planeBottom`. */
11
+ readonly planeLeft: number;
12
+ readonly planeBottom: number;
13
+ readonly planeRight: number;
14
+ readonly planeTop: number;
15
+ /**
16
+ * The glyph's cell in the atlas texture, in texels.
17
+ *
18
+ * **The single statement of this convention — nowhere else should restate it, only rely on
19
+ * it.** These run the same direction the atlas PNG's own rows do, and the same direction
20
+ * `createSurfaceTexture` actually uploads: `SurfaceTexture` (both backends) does not flip an
21
+ * `ImageBitmap` source, so texture `v = 0` samples the PNG's own row 0, its top. `atlasTop`
22
+ * is therefore the *smaller* number — nearer row 0 — and `atlasBottom` the larger one,
23
+ * unlike `planeTop`/`planeBottom` above, which are a world-space quantity and stay y-up.
24
+ * `writeUv` in `sdfTextLayout.ts` divides these by `atlasWidth`/`atlasHeight` and uses the
25
+ * result as `v` directly: no flip, because these already agree with what the texture does.
26
+ *
27
+ * A version that flipped these to be y-up — matching the plane box's own sign, so that
28
+ * "a texel and a plane coordinate agree on which way is up" — shipped for two days
29
+ * (2026-08-16) and flipped every glyph onto the wrong row of its atlas, because
30
+ * `SurfaceTexture` had already stopped flipping the upload two days earlier. Two
31
+ * conventions that each sound reasonable alone cancelled into a bug neither side's unit
32
+ * tests could see, because neither one renders a real texture.
33
+ */
34
+ readonly atlasLeft: number;
35
+ readonly atlasBottom: number;
36
+ readonly atlasRight: number;
37
+ readonly atlasTop: number;
38
+ }
39
+ export interface SdfFont {
40
+ readonly family: string;
41
+ readonly unitsPerEm: number;
42
+ readonly ascender: number;
43
+ readonly descender: number;
44
+ readonly lineHeight: number;
45
+ readonly distanceRange: number;
46
+ readonly atlasWidth: number;
47
+ readonly atlasHeight: number;
48
+ /**
49
+ * Keys in the glyph table that are more than one character, longest first.
50
+ *
51
+ * A *pre-shaped run*: a string the generator handed to the platform's own text stack,
52
+ * which joined, reordered and shaped it, baked as one atlas cell. The runtime draws
53
+ * quads from metrics and does no shaping at all, so a script that joins its letters or
54
+ * reads right to left cannot be assembled from single glyphs at draw time. `أبو` came
55
+ * out as three disconnected isolated forms marching the wrong way; as one run it comes
56
+ * out as the word.
57
+ *
58
+ * Longest first because `sdfTextLayout.ts` takes the first match at the pen, and a
59
+ * shorter run that is a prefix of a longer one must not win.
60
+ */
61
+ readonly runs: readonly string[];
62
+ glyph(character: string): SdfGlyph | null;
63
+ kerning(left: string, right: string): number;
64
+ }
65
+ /**
66
+ * Validate and index a metrics document.
67
+ *
68
+ * **Throws on a version it does not recognise**, which is the fail-fast-at-init rule
69
+ * earning its keep: the alternative is reading a field that moved and drawing text that is
70
+ * subtly misplaced, and misplaced text looks like a layout bug for as long as it takes to
71
+ * suspect the file.
72
+ *
73
+ * Required numeric fields fail at load, not draw: `unitsPerEm` scales every plane and atlas
74
+ * coordinate, so a missing one produces wrong sizes that look plausible until a frame lands
75
+ * beside a reference and they do not match. Every other required field is checked the same way.
76
+ */
77
+ export declare function parseSdfFont(document: unknown): SdfFont;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * An SDF font's metrics, parsed once and asked many times.
3
+ *
4
+ * The atlas image is the consumer's business — it arrives as a `TexImageSource` like every
5
+ * other texture this engine takes, and the engine still fetches nothing. This owns only
6
+ * the numbers that turn a string into quads.
7
+ */
8
+ const SUPPORTED_VERSION = 1;
9
+ /**
10
+ * Validate and index a metrics document.
11
+ *
12
+ * **Throws on a version it does not recognise**, which is the fail-fast-at-init rule
13
+ * earning its keep: the alternative is reading a field that moved and drawing text that is
14
+ * subtly misplaced, and misplaced text looks like a layout bug for as long as it takes to
15
+ * suspect the file.
16
+ *
17
+ * Required numeric fields fail at load, not draw: `unitsPerEm` scales every plane and atlas
18
+ * coordinate, so a missing one produces wrong sizes that look plausible until a frame lands
19
+ * beside a reference and they do not match. Every other required field is checked the same way.
20
+ */
21
+ export function parseSdfFont(document) {
22
+ if (typeof document !== 'object' || document === null) {
23
+ throw new Error('parseSdfFont: expected a metrics object');
24
+ }
25
+ const source = document;
26
+ if (source['version'] !== SUPPORTED_VERSION) {
27
+ throw new Error(`parseSdfFont: metrics version ${String(source['version'])}, this build reads ${SUPPORTED_VERSION}`);
28
+ }
29
+ if (typeof source['atlas'] !== 'object' || source['atlas'] === null) {
30
+ throw new Error('parseSdfFont: atlas field must be an object');
31
+ }
32
+ const atlas = source['atlas'];
33
+ if (typeof source['metrics'] !== 'object' || source['metrics'] === null) {
34
+ throw new Error('parseSdfFont: metrics field must be an object');
35
+ }
36
+ const metrics = source['metrics'];
37
+ if (typeof source['glyphs'] !== 'object' || source['glyphs'] === null) {
38
+ throw new Error('parseSdfFont: glyphs field must be an object');
39
+ }
40
+ const glyphs = source['glyphs'];
41
+ const kerning = (source['kerning'] ?? {});
42
+ // Validate required numeric fields
43
+ const requiredMetricsFields = ['unitsPerEm', 'ascender', 'descender', 'lineHeight'];
44
+ for (const field of requiredMetricsFields) {
45
+ if (typeof metrics[field] !== 'number') {
46
+ throw new Error(`parseSdfFont: metrics.${field} is required and must be a number`);
47
+ }
48
+ }
49
+ const requiredAtlasFields = ['distanceRange', 'width', 'height'];
50
+ for (const field of requiredAtlasFields) {
51
+ if (typeof atlas[field] !== 'number') {
52
+ throw new Error(`parseSdfFont: atlas.${field} is required and must be a number`);
53
+ }
54
+ }
55
+ return {
56
+ family: String(source['family'] ?? 'unnamed'),
57
+ unitsPerEm: metrics['unitsPerEm'],
58
+ ascender: metrics['ascender'],
59
+ descender: metrics['descender'],
60
+ lineHeight: metrics['lineHeight'],
61
+ distanceRange: atlas['distanceRange'],
62
+ atlasWidth: atlas['width'],
63
+ atlasHeight: atlas['height'],
64
+ runs: multiCharacterKeys(glyphs),
65
+ glyph(character) {
66
+ return glyphs[character] ?? null;
67
+ },
68
+ kerning(left, right) {
69
+ return kerning[`${left}\u0000${right}`] ?? 0;
70
+ },
71
+ };
72
+ }
73
+ /**
74
+ * Every key that spans more than one UTF-16 unit, longest first.
75
+ *
76
+ * Length in UTF-16 units rather than code points, because the one consumer of this order
77
+ * is `String.prototype.startsWith`, which counts the same way. Ties break lexicographically
78
+ * so that the order is a property of the table and not of the order it was written in: an
79
+ * atlas is committed and diffed, and a list that reshuffled when a glyph was added would
80
+ * make every rebake look like a change.
81
+ */
82
+ function multiCharacterKeys(glyphs) {
83
+ return Object.keys(glyphs)
84
+ .filter((key) => key.length > 1)
85
+ .sort((a, b) => b.length - a.length || (a < b ? -1 : a > b ? 1 : 0));
86
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * A string as quads, in metres, from a font's metrics.
3
+ *
4
+ * **No GL here, for the reason `textLayout.ts` gives:** which quads a string produces is
5
+ * the same arithmetic on either backend, so it lives once and the two renderers own only
6
+ * their buffers. It is also the half worth testing, and testing it needs no context.
7
+ *
8
+ * The local frame is x right, y up from the baseline, z zero. A caller supplies the basis
9
+ * that puts that somewhere -- `billboardMatrixY` for a label that faces the camera, a model
10
+ * matrix for one lying on a surface.
11
+ */
12
+ import type { SdfFont } from './sdfFont.ts';
13
+ export interface SdfTextStyle {
14
+ /** Cap height to baseline-to-baseline scale, in metres per em. */
15
+ readonly size: number;
16
+ readonly anchorX: 'left' | 'center' | 'right';
17
+ readonly anchorY: 'top' | 'middle' | 'baseline' | 'bottom';
18
+ /** Extra advance between glyphs, in ems. */
19
+ readonly letterSpacing: number;
20
+ /** Multiplier on the font's own line height. */
21
+ readonly lineHeight: number;
22
+ }
23
+ export declare const DEFAULT_SDF_TEXT_STYLE: SdfTextStyle;
24
+ export declare class SdfTextLayout {
25
+ readonly positions: Float32Array<ArrayBuffer>;
26
+ readonly uvs: Float32Array<ArrayBuffer>;
27
+ readonly indices: Uint32Array<ArrayBuffer>;
28
+ quadCount: number;
29
+ width: number;
30
+ height: number;
31
+ private key;
32
+ constructor();
33
+ /**
34
+ * Lay a string out. Returns whether anything moved, so a caller can skip the upload.
35
+ *
36
+ * The key covers the style as well as the text, because a size change moves every vertex
37
+ * and a string that only compared its characters would keep the old geometry at the new
38
+ * size -- which reads as the wrong font rather than as a stale buffer.
39
+ *
40
+ * A *piece* is one code point, unless the font carries a pre-shaped run that starts here,
41
+ * in which case it is that run and it draws as a single quad. See `SdfFont.runs`: the
42
+ * engine does no shaping, so a script that joins or reorders its letters has to arrive
43
+ * already shaped, as one cell.
44
+ */
45
+ set(font: SdfFont, text: string, style: SdfTextStyle): boolean;
46
+ }
@@ -0,0 +1,145 @@
1
+ export const DEFAULT_SDF_TEXT_STYLE = {
2
+ size: 1,
3
+ anchorX: 'left',
4
+ anchorY: 'baseline',
5
+ letterSpacing: 0,
6
+ lineHeight: 1,
7
+ };
8
+ /** Longest string this lays out. Beyond it, the tail is dropped rather than grown into. */
9
+ const MAX_QUADS = 512;
10
+ export class SdfTextLayout {
11
+ positions = new Float32Array(MAX_QUADS * 4 * 3);
12
+ uvs = new Float32Array(MAX_QUADS * 4 * 2);
13
+ indices = new Uint32Array(MAX_QUADS * 6);
14
+ quadCount = 0;
15
+ width = 0;
16
+ height = 0;
17
+ key = '';
18
+ constructor() {
19
+ /* The index pattern never changes; only how much of it is drawn. */
20
+ for (let quad = 0; quad < MAX_QUADS; quad++) {
21
+ const v = quad * 4;
22
+ const i = quad * 6;
23
+ this.indices[i] = v;
24
+ this.indices[i + 1] = v + 1;
25
+ this.indices[i + 2] = v + 2;
26
+ this.indices[i + 3] = v;
27
+ this.indices[i + 4] = v + 2;
28
+ this.indices[i + 5] = v + 3;
29
+ }
30
+ }
31
+ /**
32
+ * Lay a string out. Returns whether anything moved, so a caller can skip the upload.
33
+ *
34
+ * The key covers the style as well as the text, because a size change moves every vertex
35
+ * and a string that only compared its characters would keep the old geometry at the new
36
+ * size -- which reads as the wrong font rather than as a stale buffer.
37
+ *
38
+ * A *piece* is one code point, unless the font carries a pre-shaped run that starts here,
39
+ * in which case it is that run and it draws as a single quad. See `SdfFont.runs`: the
40
+ * engine does no shaping, so a script that joins or reorders its letters has to arrive
41
+ * already shaped, as one cell.
42
+ */
43
+ set(font, text, style) {
44
+ const key = `${text}\u0000${style.size}\u0000${style.anchorX}\u0000${style.anchorY}\u0000${style.letterSpacing}\u0000${style.lineHeight}\u0000${font.family}`;
45
+ if (key === this.key)
46
+ return false;
47
+ this.key = key;
48
+ const scale = style.size / font.unitsPerEm;
49
+ let penX = 0;
50
+ let quads = 0;
51
+ let at = 0;
52
+ let piece = text.length > 0 ? pieceAt(font, text, 0) : '';
53
+ while (at < text.length && quads < MAX_QUADS) {
54
+ const nextAt = at + piece.length;
55
+ const next = nextAt < text.length ? pieceAt(font, text, nextAt) : '';
56
+ const glyph = font.glyph(piece);
57
+ if (glyph !== null) {
58
+ const left = penX + glyph.planeLeft * scale;
59
+ const right = penX + glyph.planeRight * scale;
60
+ const bottom = glyph.planeBottom * scale;
61
+ const top = glyph.planeTop * scale;
62
+ /* A glyph with no area -- a space -- advances and draws nothing. */
63
+ if (right > left && top > bottom) {
64
+ const v = quads * 4;
65
+ write(this.positions, v, left, bottom, right, top);
66
+ writeUv(this.uvs, v, glyph.atlasLeft / font.atlasWidth, glyph.atlasBottom / font.atlasHeight, glyph.atlasRight / font.atlasWidth, glyph.atlasTop / font.atlasHeight);
67
+ quads++;
68
+ }
69
+ penX += (glyph.advance + font.kerning(piece, next)) * scale;
70
+ penX += style.letterSpacing * style.size;
71
+ }
72
+ at = nextAt;
73
+ piece = next;
74
+ }
75
+ this.quadCount = quads;
76
+ this.width = penX;
77
+ this.height = (font.ascender - font.descender) * scale;
78
+ const shiftX = style.anchorX === 'center' ? -penX / 2 : style.anchorX === 'right' ? -penX : 0;
79
+ const shiftY = style.anchorY === 'middle'
80
+ ? -((font.ascender + font.descender) / 2) * scale
81
+ : style.anchorY === 'top'
82
+ ? -font.ascender * scale
83
+ : style.anchorY === 'bottom'
84
+ ? -font.descender * scale
85
+ : 0;
86
+ if (shiftX !== 0 || shiftY !== 0) {
87
+ for (let vertex = 0; vertex < quads * 4; vertex++) {
88
+ this.positions[vertex * 3] = this.positions[vertex * 3] + shiftX;
89
+ this.positions[vertex * 3 + 1] = this.positions[vertex * 3 + 1] + shiftY;
90
+ }
91
+ }
92
+ return true;
93
+ }
94
+ }
95
+ /** Four corners of a quad, counter-clockwise from bottom-left, at z = 0. */
96
+ function write(out, vertex, left, bottom, right, top) {
97
+ const at = vertex * 3;
98
+ out[at] = left;
99
+ out[at + 1] = bottom;
100
+ out[at + 2] = 0;
101
+ out[at + 3] = right;
102
+ out[at + 4] = bottom;
103
+ out[at + 5] = 0;
104
+ out[at + 6] = right;
105
+ out[at + 7] = top;
106
+ out[at + 8] = 0;
107
+ out[at + 9] = left;
108
+ out[at + 10] = top;
109
+ out[at + 11] = 0;
110
+ }
111
+ /**
112
+ * The matching atlas corners. `atlasBottom`/`atlasTop` are already texel space -- not y-up,
113
+ * see `SdfGlyph`'s own comment for the convention and why nothing here flips them.
114
+ */
115
+ function writeUv(out, vertex, left, bottom, right, top) {
116
+ const at = vertex * 2;
117
+ out[at] = left;
118
+ out[at + 1] = bottom;
119
+ out[at + 2] = right;
120
+ out[at + 3] = bottom;
121
+ out[at + 4] = right;
122
+ out[at + 5] = top;
123
+ out[at + 6] = left;
124
+ out[at + 7] = top;
125
+ }
126
+ /**
127
+ * What to draw at this position: the longest pre-shaped run that starts here, or the single
128
+ * code point that does.
129
+ *
130
+ * Runs arrive longest first (see `SdfFont.runs`), so the first match is the right one. A
131
+ * font with no runs skips the loop entirely and this is the same per-code-point walk the
132
+ * layout has always done, which is the regression that matters: every atlas baked before
133
+ * runs existed has to lay out identically.
134
+ *
135
+ * `startsWith` with an offset rather than a slice, because comparing a substring means
136
+ * building one, and this runs once per character of every label a scene sets.
137
+ */
138
+ function pieceAt(font, text, at) {
139
+ for (const run of font.runs) {
140
+ if (run.length <= text.length - at && text.startsWith(run, at))
141
+ return run;
142
+ }
143
+ const code = text.codePointAt(at);
144
+ return code !== undefined && code > 0xffff ? text.slice(at, at + 2) : text.charAt(at);
145
+ }
@@ -0,0 +1,75 @@
1
+ import type { ReadonlyMat4 } from 'gl-matrix';
2
+ import type { Vec3 } from '../math/color.ts';
3
+ import type { SdfFont } from './sdfFont.ts';
4
+ import type { SdfTextStyle } from './sdfTextLayout.ts';
5
+ import type { SurfaceTexture } from './surfaceTexture.ts';
6
+ /**
7
+ * Text from a signed distance field, on WebGL2.
8
+ *
9
+ * Same job as `textRenderer.ts` for the pixel font: a program, a VAO, buffers, one draw call
10
+ * per string, reached only through `renderer.createSdfText()` and its `setSdfText` /
11
+ * `drawSdfText` / `disposeSdfText`. Where this differs from that file, it is because SDF text
12
+ * genuinely differs:
13
+ *
14
+ * - **A flat quad per glyph, not an instanced cube.** The pixel font is lit geometry; an SDF
15
+ * glyph is a distance field sampled by a fragment shader, so a quad textured with the field
16
+ * is the whole glyph. One `drawElements` call draws every quad the string laid out.
17
+ * - **Coverage, not a solid.** The field's antialiased edge is an alpha value, so the draw
18
+ * blends and never writes depth — see `draw` for what happens if it does.
19
+ * - **World geometry, not a screen overlay.** The pixel font builds its own projection from a
20
+ * viewport and pixel origin; SDF text takes a model matrix and draws against the scene's own
21
+ * view-projection, the same one `drawMesh` uses. A caller supplies the basis — see
22
+ * `sdfTextLayout.ts`.
23
+ * - **The atlas is the caller's.** `setSdfText` retains it, exactly as `setSurfaceTexture`
24
+ * retains a material's texture, so `draw` needs nothing handed to it again every frame.
25
+ *
26
+ * `aPosition`/`aUv` are hardcoded to locations 0/1 below, matching `sdfText.ts`'s own
27
+ * `layout(location = ...)` qualifiers — the same convention `text.ts`/`textRenderer.ts`
28
+ * follow. That file is the one written-down source of truth both this and the WGSL naga
29
+ * generates from it read; querying the locations at runtime instead would just be a second
30
+ * source of truth that happens to agree with the first until one of them changes.
31
+ */
32
+ export declare class SdfTextRenderer {
33
+ private readonly gl;
34
+ private readonly program;
35
+ private readonly uniforms;
36
+ private readonly vao;
37
+ private readonly positionBuffer;
38
+ private readonly uvBuffer;
39
+ private readonly buffers;
40
+ private readonly layout;
41
+ /** Set by `setText`; `draw` reads neither the class nor the atlas from anywhere else. */
42
+ private font;
43
+ private atlas;
44
+ constructor(gl: WebGL2RenderingContext);
45
+ /**
46
+ * Lay a string out against a font, and retain the atlas `draw` will sample.
47
+ *
48
+ * The atlas is retained here rather than taken by `draw` for the same reason
49
+ * `setSurfaceTexture` retains a material's texture: a caller that draws the same label
50
+ * every frame should not have to keep handing over an object nothing about the frame
51
+ * changed. A no-op, and no re-upload, when neither the text nor the style moved.
52
+ */
53
+ setText(font: SdfFont, atlas: SurfaceTexture, text: string, style: SdfTextStyle): void;
54
+ /**
55
+ * Draw the laid-out string at `model`, against the scene's own view-projection.
56
+ *
57
+ * Nothing draws before a `setText` call has produced at least one quad, before a font and
58
+ * an atlas are both on hand, or once opacity has faded a label out — a caller may call
59
+ * this unconditionally.
60
+ *
61
+ * Returns whether a draw call was actually issued. `Renderer.drawSdfText` uses this to
62
+ * know whether `SDF_TEXT_TEXTURE_UNIT` was touched at all, since that unit doubles as
63
+ * `SURFACE_TEXTURE_UNIT` and the caller has to put the right texture back on it — but only
64
+ * when this class actually rebound it to the atlas.
65
+ */
66
+ /**
67
+ * `outputTransform` and `outputExposure` come from the renderer rather than from here, because
68
+ * whether this pass grades depends on whether anything after it will. See `Renderer.gradeCode`.
69
+ */
70
+ draw(viewProj: ReadonlyMat4, model: Float32Array, color: Vec3, opacity: number, outputTransform: number, outputExposure: number): boolean;
71
+ dispose(): void;
72
+ /** Both vertex buffers, from the arrays `layout.set` filled in place. */
73
+ private upload;
74
+ private dynamicAttribute;
75
+ }
@@ -0,0 +1,194 @@
1
+ import { SdfTextLayout } from './sdfTextLayout.js';
2
+ import { compileProgram, uniformLocations } from './shader.js';
3
+ import { SDF_TEXT_FRAG, SDF_TEXT_VERT } from './shaders/sdfText.js';
4
+ import { SDF_TEXT_TEXTURE_UNIT } from './lightBudget.js';
5
+ /**
6
+ * Text from a signed distance field, on WebGL2.
7
+ *
8
+ * Same job as `textRenderer.ts` for the pixel font: a program, a VAO, buffers, one draw call
9
+ * per string, reached only through `renderer.createSdfText()` and its `setSdfText` /
10
+ * `drawSdfText` / `disposeSdfText`. Where this differs from that file, it is because SDF text
11
+ * genuinely differs:
12
+ *
13
+ * - **A flat quad per glyph, not an instanced cube.** The pixel font is lit geometry; an SDF
14
+ * glyph is a distance field sampled by a fragment shader, so a quad textured with the field
15
+ * is the whole glyph. One `drawElements` call draws every quad the string laid out.
16
+ * - **Coverage, not a solid.** The field's antialiased edge is an alpha value, so the draw
17
+ * blends and never writes depth — see `draw` for what happens if it does.
18
+ * - **World geometry, not a screen overlay.** The pixel font builds its own projection from a
19
+ * viewport and pixel origin; SDF text takes a model matrix and draws against the scene's own
20
+ * view-projection, the same one `drawMesh` uses. A caller supplies the basis — see
21
+ * `sdfTextLayout.ts`.
22
+ * - **The atlas is the caller's.** `setSdfText` retains it, exactly as `setSurfaceTexture`
23
+ * retains a material's texture, so `draw` needs nothing handed to it again every frame.
24
+ *
25
+ * `aPosition`/`aUv` are hardcoded to locations 0/1 below, matching `sdfText.ts`'s own
26
+ * `layout(location = ...)` qualifiers — the same convention `text.ts`/`textRenderer.ts`
27
+ * follow. That file is the one written-down source of truth both this and the WGSL naga
28
+ * generates from it read; querying the locations at runtime instead would just be a second
29
+ * source of truth that happens to agree with the first until one of them changes.
30
+ */
31
+ export class SdfTextRenderer {
32
+ gl;
33
+ program;
34
+ uniforms;
35
+ vao;
36
+ positionBuffer;
37
+ uvBuffer;
38
+ buffers = [];
39
+ layout = new SdfTextLayout();
40
+ /** Set by `setText`; `draw` reads neither the class nor the atlas from anywhere else. */
41
+ font = null;
42
+ atlas = null;
43
+ constructor(gl) {
44
+ this.gl = gl;
45
+ this.program = compileProgram(gl, SDF_TEXT_VERT, SDF_TEXT_FRAG, 'sdfText');
46
+ this.uniforms = uniformLocations(gl, this.program, 'sdfTextRenderer');
47
+ const vao = gl.createVertexArray();
48
+ if (vao === null)
49
+ throw new Error('Failed to create SDF text VAO');
50
+ this.vao = vao;
51
+ gl.bindVertexArray(vao);
52
+ /*
53
+ * Positions and UVs are `DYNAMIC_DRAW` and start already sized to `layout`'s own
54
+ * capacity, uploaded from its (all-zero, at this point) arrays. `bufferData` with a
55
+ * typed array both allocates and uploads in the one call, and the array is already the
56
+ * exact size a full string can reach, so there is no separate "how big" to track here.
57
+ *
58
+ * Locations 0 and 1 are `sdfText.ts`'s own `layout(location = ...)` qualifiers, not a
59
+ * guess — see the class comment.
60
+ */
61
+ this.positionBuffer = this.dynamicAttribute(0, this.layout.positions, 3);
62
+ this.uvBuffer = this.dynamicAttribute(1, this.layout.uvs, 2);
63
+ /*
64
+ * The index buffer, `STATIC_DRAW` and written once. `SdfTextLayout` fills its whole
65
+ * `0,1,2,0,2,3` pattern for every quad it could ever hold at construction — see its own
66
+ * comment — so nothing about a later `set()` call ever changes this buffer's contents,
67
+ * only how much of it `draw` asks to be drawn.
68
+ */
69
+ const indexBuffer = gl.createBuffer();
70
+ if (indexBuffer === null)
71
+ throw new Error('Failed to create SDF text index buffer');
72
+ this.buffers.push(indexBuffer);
73
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
74
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.layout.indices, gl.STATIC_DRAW);
75
+ gl.bindVertexArray(null);
76
+ }
77
+ /**
78
+ * Lay a string out against a font, and retain the atlas `draw` will sample.
79
+ *
80
+ * The atlas is retained here rather than taken by `draw` for the same reason
81
+ * `setSurfaceTexture` retains a material's texture: a caller that draws the same label
82
+ * every frame should not have to keep handing over an object nothing about the frame
83
+ * changed. A no-op, and no re-upload, when neither the text nor the style moved.
84
+ */
85
+ setText(font, atlas, text, style) {
86
+ this.font = font;
87
+ this.atlas = atlas;
88
+ if (this.layout.set(font, text, style))
89
+ this.upload();
90
+ }
91
+ /**
92
+ * Draw the laid-out string at `model`, against the scene's own view-projection.
93
+ *
94
+ * Nothing draws before a `setText` call has produced at least one quad, before a font and
95
+ * an atlas are both on hand, or once opacity has faded a label out — a caller may call
96
+ * this unconditionally.
97
+ *
98
+ * Returns whether a draw call was actually issued. `Renderer.drawSdfText` uses this to
99
+ * know whether `SDF_TEXT_TEXTURE_UNIT` was touched at all, since that unit doubles as
100
+ * `SURFACE_TEXTURE_UNIT` and the caller has to put the right texture back on it — but only
101
+ * when this class actually rebound it to the atlas.
102
+ */
103
+ /**
104
+ * `outputTransform` and `outputExposure` come from the renderer rather than from here, because
105
+ * whether this pass grades depends on whether anything after it will. See `Renderer.gradeCode`.
106
+ */
107
+ draw(viewProj, model, color, opacity, outputTransform, outputExposure) {
108
+ if (this.layout.quadCount === 0 || opacity <= 0 || this.font === null || this.atlas === null) {
109
+ return false;
110
+ }
111
+ const gl = this.gl;
112
+ const font = this.font;
113
+ gl.useProgram(this.program);
114
+ gl.bindVertexArray(this.vao);
115
+ /*
116
+ * Blending on, depth writes off. Text is coverage: the field's antialiased edge is an
117
+ * alpha value, not a solid surface, and writing depth from it punches a hole in whatever
118
+ * sits behind that edge — a bug that looks like a broken font rather than a depth bug.
119
+ *
120
+ * Depth *testing* is left alone, deliberately, rather than reasserted the way the pixel
121
+ * font's own `TextRenderer.draw` reasserts it. That renderer is a screen overlay running
122
+ * at the end of the frame and has to recover state a sky or an earlier pass may have
123
+ * left behind. SDF text is world geometry drawn inside the mesh pass, where an enabled
124
+ * depth test and `LEQUAL` are already the ambient state — the same assumption
125
+ * `drawTranslucentMesh` makes for exactly the same reason.
126
+ */
127
+ gl.depthMask(false);
128
+ gl.enable(gl.BLEND);
129
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
130
+ this.atlas.bind(gl, SDF_TEXT_TEXTURE_UNIT);
131
+ const u = this.uniforms;
132
+ gl.uniform1i(u['uOutputTransform'] ?? null, outputTransform);
133
+ gl.uniform1f(u['uOutputExposure'] ?? null, outputExposure);
134
+ setMat4(gl, u['uViewProj'], viewProj);
135
+ setMat4(gl, u['uModel'], model);
136
+ setVec3(gl, u['uColor'], color);
137
+ setFloat(gl, u['uOpacity'], opacity);
138
+ setFloat(gl, u['uDistanceRange'], font.distanceRange);
139
+ setVec2(gl, u['uAtlasSize'], font.atlasWidth, font.atlasHeight);
140
+ const atlasLoc = u['uAtlas'];
141
+ if (atlasLoc !== undefined)
142
+ gl.uniform1i(atlasLoc, SDF_TEXT_TEXTURE_UNIT);
143
+ gl.drawElements(gl.TRIANGLES, this.layout.quadCount * 6, gl.UNSIGNED_INT, 0);
144
+ gl.bindVertexArray(null);
145
+ gl.disable(gl.BLEND);
146
+ gl.depthMask(true);
147
+ return true;
148
+ }
149
+ dispose() {
150
+ const gl = this.gl;
151
+ for (const buffer of this.buffers)
152
+ gl.deleteBuffer(buffer);
153
+ this.buffers.length = 0;
154
+ gl.deleteVertexArray(this.vao);
155
+ gl.deleteProgram(this.program);
156
+ }
157
+ /** Both vertex buffers, from the arrays `layout.set` filled in place. */
158
+ upload() {
159
+ const gl = this.gl;
160
+ const vertexCount = this.layout.quadCount * 4;
161
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
162
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.positions, 0, vertexCount * 3);
163
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
164
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.uvs, 0, vertexCount * 2);
165
+ }
166
+ dynamicAttribute(location, initial, size) {
167
+ const gl = this.gl;
168
+ const buffer = gl.createBuffer();
169
+ if (buffer === null)
170
+ throw new Error('Failed to create SDF text buffer');
171
+ this.buffers.push(buffer);
172
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
173
+ gl.bufferData(gl.ARRAY_BUFFER, initial, gl.DYNAMIC_DRAW);
174
+ gl.enableVertexAttribArray(location);
175
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
176
+ return buffer;
177
+ }
178
+ }
179
+ function setFloat(gl, location, value) {
180
+ if (location !== undefined)
181
+ gl.uniform1f(location, value);
182
+ }
183
+ function setVec2(gl, location, x, y) {
184
+ if (location !== undefined)
185
+ gl.uniform2f(location, x, y);
186
+ }
187
+ function setVec3(gl, location, value) {
188
+ if (location !== undefined)
189
+ gl.uniform3f(location, value[0], value[1], value[2]);
190
+ }
191
+ function setMat4(gl, location, value) {
192
+ if (location !== undefined)
193
+ gl.uniformMatrix4fv(location, false, value);
194
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * How rough the sea is for a given wind.
3
+ *
4
+ * Wind does not push existing waves around — it *builds* them. A calm sea is
5
+ * nearly flat with no whitecaps; a strong wind raises steep crests that break.
6
+ * Steering the swell without changing its size would leave the water equally
7
+ * choppy in a dead calm and a gale, which is the giveaway that the weather is
8
+ * decoration rather than a cause.
9
+ */
10
+ export interface SeaState {
11
+ /** Multiplier on the Gerstner steepness the surface was authored with. */
12
+ steepness: number;
13
+ /** How readily crests break into foam, 0 for none. */
14
+ foam: number;
15
+ }
16
+ export declare function seaStateForWind(windSpeed: number): SeaState;
17
+ /**
18
+ * The same surface state, asked for directly instead of derived from wind.
19
+ *
20
+ * Shares this module's floor and ceiling so an indoor body and an outdoor one at the
21
+ * same roughness look the same — the point is where the number *comes from*, not a
22
+ * second scale with its own feel. Foam is deliberately reachable: a sluice or a pump
23
+ * outfall breaks without any wind at all.
24
+ */
25
+ export declare function seaStateForAgitation(agitation: number): SeaState;