@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,201 @@
1
+ import { countCells, forEachCell, measureText, GLYPH_HEIGHT } from '../geometry/pixelFont.js';
2
+ /**
3
+ * Where a string becomes cells, for both backends.
4
+ *
5
+ * **Nothing here names a device.** Laying a message out is arithmetic over the pixel font —
6
+ * which cells are lit, how wide the result is, which character each cell belongs to for the
7
+ * arrival stagger — and it produced the same two arrays whichever API was going to upload
8
+ * them. Keeping it in the WebGL2 class meant a second backend would have had to reimplement
9
+ * it, and the rule this repository learned the hard way is that anything both backends decide
10
+ * lives in one module and is bound twice. `waterGrid.ts` and `plumeGeometry.ts` are the same
11
+ * shape.
12
+ *
13
+ * A backend owns the buffers and the pipeline; this owns what goes in them.
14
+ */
15
+ /**
16
+ * How many cells one text object may hold.
17
+ *
18
+ * Sized for a long notification rather than a paragraph — this is a display face for short
19
+ * shouted strings, and anything approaching a sentence should be DOM text, which is what a
20
+ * screen reader can read and a translator can translate.
21
+ */
22
+ export const MAX_CELLS = 900;
23
+ export const DEFAULT_TEXT_STYLE = {
24
+ cellSize: 6,
25
+ charOffset: 0,
26
+ color: [1, 1, 1],
27
+ glow: 0.5,
28
+ alpha: 1,
29
+ reveal: 1,
30
+ spin: 0,
31
+ punch: 0,
32
+ bob: 0,
33
+ };
34
+ /** Width of a string in pixels at a given cell size, without laying it out. */
35
+ export function textWidthPx(text, cellSize) {
36
+ return measureText(text) * cellSize;
37
+ }
38
+ export function textHeightPx(cellSize) {
39
+ return GLYPH_HEIGHT * cellSize;
40
+ }
41
+ export class TextLayout {
42
+ /** Reused every upload; text changes far too often to allocate per change. */
43
+ cells = new Float32Array(MAX_CELLS * 2);
44
+ chars = new Float32Array(MAX_CELLS);
45
+ instanceCount = 0;
46
+ /** Characters in the current content, for the per-character stagger. */
47
+ charCount = 1;
48
+ lastKey = '';
49
+ widthCells = 0;
50
+ /** Width of the last laid-out string, in pixels at a given cell size. */
51
+ widthPx(cellSize) {
52
+ return this.widthCells * cellSize;
53
+ }
54
+ /**
55
+ * Lay a string out, and say whether anything moved.
56
+ *
57
+ * **The return value is the whole point of the skip.** Most frames show the same message as
58
+ * the frame before, and re-uploading a buffer to say so is the sort of cost that only shows
59
+ * up on a phone. The arrays are reused in place, so a caller has no other way to tell.
60
+ */
61
+ setText(text) {
62
+ if (text === this.lastKey)
63
+ return false;
64
+ this.lastKey = text;
65
+ this.widthCells = measureText(text);
66
+ /*
67
+ * Truncate rather than throw: a frame with a clipped message is better than a frame that
68
+ * does not render, and this is a display face being handed runtime strings.
69
+ */
70
+ if (countCells(text) > MAX_CELLS)
71
+ this.instanceCount = 0;
72
+ let index = 0;
73
+ forEachCell(text, (x, y, charIndex) => {
74
+ if (index >= MAX_CELLS)
75
+ return;
76
+ this.cells[index * 2] = x;
77
+ this.cells[index * 2 + 1] = y;
78
+ this.chars[index] = charIndex;
79
+ index++;
80
+ });
81
+ this.instanceCount = index;
82
+ this.charCount = Math.max(1, text.length);
83
+ return true;
84
+ }
85
+ /**
86
+ * A solid rectangle of cells, for a keycap or a backing plate.
87
+ *
88
+ * Not text. A run of block glyphs looks like the same thing and is not: glyphs are spaced a
89
+ * cell apart, so the "plate" comes out striped and sized in whole glyph widths rather than
90
+ * in cells — which is exactly how the first keycap ended up wider than the word it was
91
+ * behind.
92
+ *
93
+ * `bottomCell` is where the rectangle starts vertically, in the same baseline-relative cells
94
+ * the glyphs use, so -1 gives a cell of padding below.
95
+ */
96
+ setPlate(widthCells, heightCells, bottomCell) {
97
+ const key = `plate:${widthCells}:${heightCells}:${bottomCell}`;
98
+ if (key === this.lastKey)
99
+ return false;
100
+ this.lastKey = key;
101
+ this.widthCells = widthCells;
102
+ let index = 0;
103
+ for (let x = 0; x < widthCells && index < MAX_CELLS; x++) {
104
+ for (let y = 0; y < heightCells && index < MAX_CELLS; y++) {
105
+ this.cells[index * 2] = x;
106
+ this.cells[index * 2 + 1] = bottomCell + y;
107
+ /*
108
+ * One "character", so a plate arrives as a single unit rather than assembling column
109
+ * by column behind the word it belongs to.
110
+ */
111
+ this.chars[index] = 0;
112
+ index++;
113
+ }
114
+ }
115
+ this.instanceCount = index;
116
+ this.charCount = 1;
117
+ return true;
118
+ }
119
+ }
120
+ /** A unit cube centred on the origin: six faces, two triangles each. */
121
+ function buildCube() {
122
+ const faces = [
123
+ {
124
+ normal: [0, 0, 1],
125
+ corners: [
126
+ [-1, -1, 1],
127
+ [1, -1, 1],
128
+ [1, 1, 1],
129
+ [-1, 1, 1],
130
+ ],
131
+ },
132
+ {
133
+ normal: [0, 0, -1],
134
+ corners: [
135
+ [1, -1, -1],
136
+ [-1, -1, -1],
137
+ [-1, 1, -1],
138
+ [1, 1, -1],
139
+ ],
140
+ },
141
+ {
142
+ normal: [1, 0, 0],
143
+ corners: [
144
+ [1, -1, 1],
145
+ [1, -1, -1],
146
+ [1, 1, -1],
147
+ [1, 1, 1],
148
+ ],
149
+ },
150
+ {
151
+ normal: [-1, 0, 0],
152
+ corners: [
153
+ [-1, -1, -1],
154
+ [-1, -1, 1],
155
+ [-1, 1, 1],
156
+ [-1, 1, -1],
157
+ ],
158
+ },
159
+ {
160
+ normal: [0, 1, 0],
161
+ corners: [
162
+ [-1, 1, 1],
163
+ [1, 1, 1],
164
+ [1, 1, -1],
165
+ [-1, 1, -1],
166
+ ],
167
+ },
168
+ {
169
+ normal: [0, -1, 0],
170
+ corners: [
171
+ [-1, -1, -1],
172
+ [1, -1, -1],
173
+ [1, -1, 1],
174
+ [-1, -1, 1],
175
+ ],
176
+ },
177
+ ];
178
+ const positions = [];
179
+ const normals = [];
180
+ for (const face of faces) {
181
+ const [a, b, c, d] = face.corners;
182
+ /*
183
+ * Wound clockwise, which is backwards — deliberately. The vertex shader flips Y to put the
184
+ * origin at the top left, and a mirror reverses winding, so faces authored the usual way
185
+ * come out back-facing and every one of them is culled. The symptom is text that renders
186
+ * with no GL error and no pixels, which is a genuinely difficult thing to look at and
187
+ * diagnose.
188
+ */
189
+ for (const corner of [a, c, b, a, d, c]) {
190
+ positions.push(corner[0], corner[1], corner[2]);
191
+ normals.push(face.normal[0], face.normal[1], face.normal[2]);
192
+ }
193
+ }
194
+ return {
195
+ positions: new Float32Array(positions),
196
+ normals: new Float32Array(normals),
197
+ vertexCount: positions.length / 3,
198
+ };
199
+ }
200
+ /** Unit cube, as position/normal pairs. Two triangles per face. Built once, shared by both. */
201
+ export const TEXT_CUBE = buildCube();
@@ -0,0 +1,32 @@
1
+ import type { TextStyle } from './textLayout.ts';
2
+ export declare class TextRenderer {
3
+ private readonly gl;
4
+ private readonly program;
5
+ private readonly uniforms;
6
+ private readonly vao;
7
+ private readonly cellBuffer;
8
+ private readonly charBuffer;
9
+ private readonly buffers;
10
+ private readonly layout;
11
+ constructor(gl: WebGL2RenderingContext);
12
+ /** Width of the last laid-out string, in pixels at a given cell size. */
13
+ widthPx(cellSize: number): number;
14
+ /**
15
+ * Lay a string out. The upload is skipped when the text has not changed, because most frames
16
+ * show the same message as the frame before and re-uploading a buffer to say so is the sort
17
+ * of cost that only shows up on a phone.
18
+ */
19
+ setText(text: string): void;
20
+ /** A solid rectangle of cells, for a keycap or a backing plate. See `TextLayout.setPlate`. */
21
+ setPlate(widthCells: number, heightCells: number, bottomCell: number): void;
22
+ /**
23
+ * @param originX left edge, in pixels from the left of the viewport.
24
+ * @param originY baseline, in pixels from the top.
25
+ */
26
+ draw(viewportWidth: number, viewportHeight: number, originX: number, originY: number, style: TextStyle, timeSec: number): void;
27
+ dispose(): void;
28
+ /** Both instance buffers, from the arrays the layout filled in place. */
29
+ private upload;
30
+ private staticAttribute;
31
+ private instanceAttribute;
32
+ }
@@ -0,0 +1,176 @@
1
+ import { MAX_CELLS, TEXT_CUBE, TextLayout } from './textLayout.js';
2
+ import { compileProgram, uniformLocations } from './shader.js';
3
+ import { TEXT_FRAG, TEXT_VERT } from './shaders/text.js';
4
+ /**
5
+ * Text as geometry, on WebGL2.
6
+ *
7
+ * Every lit cell of every glyph is an instanced cube, so a message catches light, has depth,
8
+ * and can rotate — rather than being a flat sticker over a flat-shaded world. One draw call
9
+ * per string.
10
+ *
11
+ * **The layout is not here.** Which cells are lit is arithmetic over the pixel font and is the
12
+ * same on either backend, so it lives in `textLayout.ts` and this owns only the buffers, the
13
+ * program and the state the draw needs. See that file for why.
14
+ *
15
+ * Reached through `renderer.createText()` and the renderer's own `setText` / `drawText` /
16
+ * `disposeText`, never constructed by a caller: a caller holding a context is a caller pinned
17
+ * to one backend, which is what kept `showroom` on WebGL2.
18
+ */
19
+ /** WebGL2's clip space is the shader's own, so the correction it binds is nothing. */
20
+ const TEXT_IDENTITY = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
21
+ export class TextRenderer {
22
+ gl;
23
+ program;
24
+ uniforms;
25
+ vao;
26
+ cellBuffer;
27
+ charBuffer;
28
+ buffers = [];
29
+ layout = new TextLayout();
30
+ constructor(gl) {
31
+ this.gl = gl;
32
+ this.program = compileProgram(gl, TEXT_VERT, TEXT_FRAG, 'text');
33
+ this.uniforms = uniformLocations(gl, this.program, 'textRenderer');
34
+ const vao = gl.createVertexArray();
35
+ if (vao === null)
36
+ throw new Error('Failed to create text VAO');
37
+ this.vao = vao;
38
+ gl.bindVertexArray(vao);
39
+ this.staticAttribute(0, TEXT_CUBE.positions, 3);
40
+ this.staticAttribute(1, TEXT_CUBE.normals, 3);
41
+ this.cellBuffer = this.instanceAttribute(2, MAX_CELLS * 2, 2);
42
+ this.charBuffer = this.instanceAttribute(3, MAX_CELLS, 1);
43
+ gl.bindVertexArray(null);
44
+ }
45
+ /** Width of the last laid-out string, in pixels at a given cell size. */
46
+ widthPx(cellSize) {
47
+ return this.layout.widthPx(cellSize);
48
+ }
49
+ /**
50
+ * Lay a string out. The upload is skipped when the text has not changed, because most frames
51
+ * show the same message as the frame before and re-uploading a buffer to say so is the sort
52
+ * of cost that only shows up on a phone.
53
+ */
54
+ setText(text) {
55
+ if (this.layout.setText(text))
56
+ this.upload();
57
+ }
58
+ /** A solid rectangle of cells, for a keycap or a backing plate. See `TextLayout.setPlate`. */
59
+ setPlate(widthCells, heightCells, bottomCell) {
60
+ if (this.layout.setPlate(widthCells, heightCells, bottomCell))
61
+ this.upload();
62
+ }
63
+ /**
64
+ * @param originX left edge, in pixels from the left of the viewport.
65
+ * @param originY baseline, in pixels from the top.
66
+ */
67
+ draw(viewportWidth, viewportHeight, originX, originY, style, timeSec) {
68
+ if (this.layout.instanceCount === 0 || style.alpha <= 0)
69
+ return;
70
+ const gl = this.gl;
71
+ gl.useProgram(this.program);
72
+ gl.bindVertexArray(this.vao);
73
+ /*
74
+ * Text gets a fresh depth buffer rather than no depth test at all.
75
+ *
76
+ * Turning depth off entirely is the obvious move and it is wrong: the cubes are solid, so
77
+ * with nothing sorting them the last face in the buffer wins and every letter renders as
78
+ * one flat facet. Clearing depth puts the whole message in front of the scene while still
79
+ * letting its own geometry sort against itself, which is what gives the glyphs their edges.
80
+ */
81
+ // The mask goes up *before* the clear. `glClear` respects it, and the pass that ran before
82
+ // this one — the plumes — leaves depth writes disabled, so clearing first silently did
83
+ // nothing and the text was depth-tested against whatever the scene had already written. It
84
+ // rendered on some frames and not others, with no GL error either way.
85
+ gl.depthMask(true);
86
+ gl.clear(gl.DEPTH_BUFFER_BIT);
87
+ gl.enable(gl.DEPTH_TEST);
88
+ /*
89
+ * **The equal-admitting compare in whichever direction this context tests.** Text lies flush on
90
+ * the surface it labels, so it needs the case that keeps a coplanar fragment — `LEQUAL` where
91
+ * nearer is smaller and `GEQUAL` where nearer is larger. Derived from the compare already set
92
+ * rather than named, because this file has no way to know which way the frame is drawing and a
93
+ * constant here silently drops every glyph on a reversed one.
94
+ */
95
+ const current = gl.getParameter(gl.DEPTH_FUNC);
96
+ const reversed = current === gl.GREATER || current === gl.GEQUAL;
97
+ gl.depthFunc(reversed ? gl.GEQUAL : gl.LEQUAL);
98
+ gl.enable(gl.BLEND);
99
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
100
+ setVec2(gl, this.uniforms['uViewport'], viewportWidth, viewportHeight);
101
+ setVec2(gl, this.uniforms['uOrigin'], originX, originY);
102
+ setFloat(gl, this.uniforms['uCellSize'], style.cellSize);
103
+ // Far enough that a whole line barely converges, near enough that a rotating character
104
+ // reads as turning rather than shearing.
105
+ setFloat(gl, this.uniforms['uDepth'], Math.max(viewportWidth, 600) * 1.4);
106
+ setFloat(gl, this.uniforms['uReveal'], style.reveal);
107
+ setFloat(gl, this.uniforms['uCharCount'], Math.max(1, style.charSpan ?? this.layout.charCount));
108
+ setFloat(gl, this.uniforms['uCharOffset'], style.charOffset ?? 0);
109
+ setFloat(gl, this.uniforms['uSpin'], style.spin);
110
+ setFloat(gl, this.uniforms['uPunch'], style.punch);
111
+ setFloat(gl, this.uniforms['uBob'], style.bob);
112
+ setFloat(gl, this.uniforms['uTime'], timeSec);
113
+ setFloat(gl, this.uniforms['uGlow'], style.glow);
114
+ setFloat(gl, this.uniforms['uAlpha'], style.alpha);
115
+ /* Identity: this backend's clip space is the one the shader was written against. */
116
+ const correction = this.uniforms['uClipCorrection'];
117
+ if (correction !== undefined)
118
+ gl.uniformMatrix4fv(correction, false, TEXT_IDENTITY);
119
+ const color = this.uniforms['uColor'];
120
+ if (color !== undefined) {
121
+ gl.uniform3f(color, style.color[0], style.color[1], style.color[2]);
122
+ }
123
+ gl.drawArraysInstanced(gl.TRIANGLES, 0, TEXT_CUBE.vertexCount, this.layout.instanceCount);
124
+ gl.bindVertexArray(null);
125
+ }
126
+ dispose() {
127
+ const gl = this.gl;
128
+ for (const buffer of this.buffers)
129
+ gl.deleteBuffer(buffer);
130
+ this.buffers.length = 0;
131
+ gl.deleteVertexArray(this.vao);
132
+ gl.deleteProgram(this.program);
133
+ }
134
+ /** Both instance buffers, from the arrays the layout filled in place. */
135
+ upload() {
136
+ const gl = this.gl;
137
+ const count = this.layout.instanceCount;
138
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.cellBuffer);
139
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.cells, 0, count * 2);
140
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.charBuffer);
141
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.chars, 0, count);
142
+ }
143
+ staticAttribute(location, data, size) {
144
+ const gl = this.gl;
145
+ const buffer = gl.createBuffer();
146
+ if (buffer === null)
147
+ throw new Error('Failed to create text buffer');
148
+ this.buffers.push(buffer);
149
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
150
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
151
+ gl.enableVertexAttribArray(location);
152
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
153
+ return buffer;
154
+ }
155
+ instanceAttribute(location, floats, size) {
156
+ const gl = this.gl;
157
+ const buffer = gl.createBuffer();
158
+ if (buffer === null)
159
+ throw new Error('Failed to create text buffer');
160
+ this.buffers.push(buffer);
161
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
162
+ gl.bufferData(gl.ARRAY_BUFFER, floats * 4, gl.DYNAMIC_DRAW);
163
+ gl.enableVertexAttribArray(location);
164
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
165
+ gl.vertexAttribDivisor(location, 1);
166
+ return buffer;
167
+ }
168
+ }
169
+ function setFloat(gl, location, value) {
170
+ if (location !== undefined)
171
+ gl.uniform1f(location, value);
172
+ }
173
+ function setVec2(gl, location, x, y) {
174
+ if (location !== undefined)
175
+ gl.uniform2f(location, x, y);
176
+ }
@@ -0,0 +1,272 @@
1
+ /** Collision-safe, configurable third-person orbit camera rig. */
2
+ import type { BoomTiming } from './boom.ts';
3
+ import type { ColliderSet } from '@driftengine/physics';
4
+ import type { GroundSurface } from '../physics/ribbonSurface.ts';
5
+ import { Camera } from './camera.ts';
6
+ export interface ThirdPersonCameraOptions {
7
+ boomDistance: number;
8
+ boomRadius: number;
9
+ boomMinDistance: number;
10
+ positionLambda: number;
11
+ fovLambda: number;
12
+ pitchMin: number;
13
+ pitchMax: number;
14
+ initialPitch: number;
15
+ initialFovYDeg: number;
16
+ /**
17
+ * How fast the arm may change length. Absent keeps the numbers every rig had.
18
+ *
19
+ * **The defaults are written for an arm of several metres**, where the speed ceilings bind and
20
+ * the obstruction is a railing sweeping across for a few frames. On a short arm neither ceiling
21
+ * binds, only the damping acts, and easing into a wall is the wrong trade — see `BoomTiming`,
22
+ * which carries the measurement and the immediate-retract spelling.
23
+ */
24
+ readonly boomTiming?: Partial<BoomTiming>;
25
+ /**
26
+ * Whether the rig damps the roll it is handed. Absent means yes, which every rig had.
27
+ *
28
+ * **False is for a caller that has already damped it**, and that is not a niche: a consumer with
29
+ * a comfort setting on roll applies the same value to a first-person view, so a roll damped again
30
+ * here is damped twice and the setting stops meaning what it is asserted to mean. The rig's own
31
+ * damping exists so a subject snapping between surfaces cannot snap the view; a caller that has
32
+ * solved that itself is not asking for it twice.
33
+ */
34
+ readonly dampRoll?: boolean;
35
+ }
36
+ /**
37
+ * Something that can say how far an arm gets before it hits the world.
38
+ *
39
+ * **An alternative to the `ColliderSet`, on the seam `surface` already uses.** The rig tests its
40
+ * arm with `segmentHit` against a set of boxes, and a consumer whose world is a `PhysicsWorld`
41
+ * does not have one — so using the rig meant building and maintaining a second copy of the world
42
+ * for the camera alone, which is a cost large enough to have kept one consumer off the rig
43
+ * entirely.
44
+ *
45
+ * A segment and a radius in, metres along it or null out. Metres rather than a fraction because
46
+ * that is what a raycast answers and the rig knows its own length; null rather than the length
47
+ * because "nothing was hit" and "something was hit at the far end" are different facts, and a
48
+ * caller should not have to encode the first as the second.
49
+ */
50
+ export interface BoomObstruction {
51
+ distance(fromX: number, fromY: number, fromZ: number, alongX: number, alongY: number, alongZ: number, radius: number): number | null;
52
+ }
53
+ /**
54
+ * Generic camera mechanism. The caller supplies its already-resolved target
55
+ * height and desired FOV, keeping crouch rules and speed effects in the game.
56
+ */
57
+ export declare class ThirdPersonCamera {
58
+ private readonly colliders;
59
+ private readonly options;
60
+ private readonly surface;
61
+ /**
62
+ * A world query for the arm, instead of the collider set.
63
+ *
64
+ * Fourth and defaulted, so no existing call site changes — the same shape `surface` was added
65
+ * in. When it is given, `colliders` is not consulted at all: a caller with one has the whole
66
+ * world behind it and a set of boxes beside it would be a second, partial answer to the same
67
+ * question. See `BoomObstruction` for why one consumer could not supply the set.
68
+ */
69
+ private readonly obstruction;
70
+ readonly camera: Camera;
71
+ private smoothX;
72
+ private smoothY;
73
+ private smoothZ;
74
+ /**
75
+ * Where the target was last frame, so its velocity can be differenced out of it.
76
+ *
77
+ * **Differenced here rather than asked of the caller**, because every caller already hands the
78
+ * target over each frame and a second parameter for something derivable from the first is a
79
+ * signature every consumer has to be told about. It is exact for a target moving smoothly, which
80
+ * a vehicle under a fixed step with interpolation is: the engine's own harness measures the
81
+ * subject holding its world speed to within a twentieth of a per cent through frame jitter that
82
+ * moves this camera by 5%.
83
+ */
84
+ /**
85
+ * The frame the arm is built in. World axes unless a caller says otherwise.
86
+ *
87
+ * **The arm used to be a spherical boom about world Y** — `-sin(yaw) cos(pitch)`, `-sin(pitch)`,
88
+ * `cos(yaw) cos(pitch)` — so a subject standing on a wall or a ceiling got an arm that still
89
+ * swung about world up, and the rig placed the eye through the surface the subject was standing
90
+ * on. `groundClear` cut the arm where the eye would go under the deck, which is the same
91
+ * assumption a second time.
92
+ *
93
+ * The rig already anticipated this case and stopped one step short of it: `targetRoll`'s comment
94
+ * says the rig knows nothing about banked surfaces, only that a camera can be tilted, and damps
95
+ * roll here so a subject snapping between surfaces cannot snap the view. The arm is carried the
96
+ * same distance now. Yaw and pitch keep their meaning and become angles inside this frame, so a
97
+ * caller that never sets one gets exactly the arm it always got.
98
+ */
99
+ boomUpX: number;
100
+ boomUpY: number;
101
+ boomUpZ: number;
102
+ /**
103
+ * The frame's forward, **readable because a caller that sets one needs to know what it became**.
104
+ *
105
+ * Both `setBoomUp` and `setBoomForward` orthogonalise against the other axis, so what the rig
106
+ * holds is rarely the vector it was handed — and a caller computing a roll, or asking where its
107
+ * subject's heading ended up, needs the one the arm is actually built from. Assigning these
108
+ * directly does not rebuild the frame; the two setters are what keep the three axes orthonormal.
109
+ */
110
+ boomForwardX: number;
111
+ boomForwardY: number;
112
+ boomForwardZ: number;
113
+ private boomRightX;
114
+ private boomRightY;
115
+ private boomRightZ;
116
+ private lastTargetX;
117
+ private lastTargetY;
118
+ private lastTargetZ;
119
+ private fov;
120
+ private roll;
121
+ private snapped;
122
+ /**
123
+ * The arm out to the camera, and its speed limits.
124
+ *
125
+ * This rig used to apply the collision query's fraction directly. The query is a
126
+ * step function — a railing either blocks the arm or it does not — so the camera
127
+ * jumped by up to 4 m in a single frame every time one swept across it. That is
128
+ * the same artefact the replay camera was fixed for after it was reported as
129
+ * juddering and jumpy; this rig simply never got the fix, and a railed descent
130
+ * is where it would be worst.
131
+ */
132
+ private readonly boom;
133
+ /** Reused by the ground query; the rig allocates nothing per frame. */
134
+ private readonly groundHit;
135
+ /**
136
+ * @param surface The walkable ground, where the caller has one. **Not optional in
137
+ * practice**, and the reason is worth stating: `colliders` is not the whole world.
138
+ * A consumer whose drivable surface is a banked ribbon cannot put it in the collider
139
+ * set — a world-axis box around a banked cross-section has a flat lid at its highest
140
+ * corner, which is floor where nothing is drawn and a wall where the next slab's lid
141
+ * stands above the character's feet. So that surface is invisible to `segmentHit`, and a
142
+ * boom tested only against boxes passes straight through the deck.
143
+ *
144
+ * Which is exactly what it did. On a descent, pitching the view down put the eye
145
+ * *under the track*, with the deck between the camera and the character: the rig sees the
146
+ * underside of the surface instead of the character, because dynamic surfaces are not
147
+ * part of what it tests against. Worse in replays, where the camera moves far more than
148
+ * a player ever moves it.
149
+ */
150
+ constructor(colliders: ColliderSet, options: Readonly<ThirdPersonCameraOptions>, surface?: GroundSurface | null,
151
+ /**
152
+ * A world query for the arm, instead of the collider set.
153
+ *
154
+ * Fourth and defaulted, so no existing call site changes — the same shape `surface` was added
155
+ * in. When it is given, `colliders` is not consulted at all: a caller with one has the whole
156
+ * world behind it and a set of boxes beside it would be a second, partial answer to the same
157
+ * question. See `BoomObstruction` for why one consumer could not supply the set.
158
+ */
159
+ obstruction?: BoomObstruction | null);
160
+ /**
161
+ * Place the rig outright on the next update instead of gliding to it.
162
+ *
163
+ * The first update already does this — a camera that eases in from the origin
164
+ * on the first frame of a session is a swoop nobody asked for. This re-arms it,
165
+ * for a subject that has *moved without travelling*: a scrub bar dropped
166
+ * somewhere else in a replay, or a character put back on a checkpoint. Smoothing
167
+ * across that is a camera flying the length of the route with nothing in frame,
168
+ * which the replay camera has already been measured doing at 124 m in a single
169
+ * shot.
170
+ *
171
+ * Only the caller can tell that apart from a legitimately fast frame, which is
172
+ * why it is a method here rather than a distance threshold in `update`.
173
+ */
174
+ /**
175
+ * How far out the arm may reach before the eye would drop below the ground, as a
176
+ * fraction of its length. 1 when the ground is nowhere near it.
177
+ *
178
+ * Sampled from the far end inward and returned on the first clear station, because the
179
+ * useful answer is the *longest* arm that works. `boomRadius` of clearance, so the eye
180
+ * stops above the deck rather than grazing it — the same margin the box query uses.
181
+ */
182
+ private groundClear;
183
+ /**
184
+ * Point the boom's up at a direction; the rest of the frame follows it.
185
+ *
186
+ * **Forward is carried from the frame it had rather than derived from a world axis**, which is
187
+ * what makes a body walking from a floor onto a wall and onto a ceiling continuous. Deriving it
188
+ * from a fixed reference would be one line shorter and would put a pole wherever `up` lined up
189
+ * with that reference: the arm would swing through a half turn as a subject crossed it, on a rig
190
+ * whose whole job is that the view does not snap.
191
+ *
192
+ * The fallbacks are only reached when the carried forward has become parallel to the new up,
193
+ * which a continuous rotation cannot do in one step and a teleport can. World Z first and world
194
+ * X behind it, so there is always an answer and it is never a normalised zero.
195
+ *
196
+ * A zero-length vector keeps the frame it had, for the reason `setUp` on the character
197
+ * controller gives: a NaN basis is a camera that is nowhere, and every number downstream of it
198
+ * reads as a rig that has failed rather than as an argument that was refused.
199
+ */
200
+ setBoomUp(x: number, y: number, z: number): void;
201
+ /**
202
+ * Point the boom's forward at a direction; the up is kept and the arm is rebuilt around it.
203
+ *
204
+ * **For a subject that has a heading of its own, which the carried forward cannot express.**
205
+ * `setBoomUp` keeps whatever forward the frame had, re-projected — the right default, because it
206
+ * is what makes a body walking from a floor onto a wall continuous, and because most subjects
207
+ * have no heading to speak of. What it cannot say is "behind *this*": a yaw of π puts the eye
208
+ * opposite a forward the caller never chose and, until this existed, could not read either. A
209
+ * subject spawning face-on to a wall got a shot framed at random, and a caller trying to work out
210
+ * how far to roll so that the support surface sits at the bottom of the picture had to know where
211
+ * the arm was — an azimuth measured from an axis nothing reported.
212
+ *
213
+ * **This is not a reversal of the carried forward and does not change it for anyone.** A caller
214
+ * that never calls this carries its forward exactly as before, and one that does still has it
215
+ * re-orthogonalised by every `setBoomUp` — the heading is a direction in the world, and the frame
216
+ * it lands in is the surface's.
217
+ *
218
+ * A zero-length vector, or one parallel to the current up, keeps the frame it had. **Deliberately
219
+ * not the fallback chain `setBoomUp` uses**, and the asymmetry is the point: that method must
220
+ * produce *some* forward because the up is what changed and a frame needs one, so an arbitrary
221
+ * axis is better than none. Here the forward is the argument, and answering a direction the
222
+ * caller did not ask for is precisely the failure this exists to fix.
223
+ */
224
+ setBoomForward(x: number, y: number, z: number): void;
225
+ /**
226
+ * Build the three axes from an up and a candidate forward, or answer false and change nothing.
227
+ *
228
+ * Shared by both setters so that "orthogonalised against the other axis" means one piece of
229
+ * arithmetic rather than two that have to be kept in step. False is the parallel case: there is
230
+ * no forward perpendicular to an up it is already parallel to, and what each caller does about
231
+ * that is the one thing they do differently.
232
+ */
233
+ private setBasis;
234
+ snap(): void;
235
+ /**
236
+ * How much of the arm is clear of the world, from whichever source the rig was given.
237
+ *
238
+ * The injected query wins outright where there is one, for the reason its own type gives: a
239
+ * caller with the whole world behind it does not also want a partial answer from a box set.
240
+ */
241
+ private blockedFraction;
242
+ update(frameDt: number, yaw: number, pitch: number, targetX: number, targetY: number, targetZ: number, targetFovYDeg: number,
243
+ /**
244
+ * Roll, radians. The caller's policy: this rig knows nothing about banked
245
+ * surfaces, only that a camera can be tilted. Damped here rather than by
246
+ * the caller so a subject snapping between surfaces cannot snap the view.
247
+ */
248
+ targetRoll?: number): void;
249
+ /**
250
+ * Point the camera back down the arm, in the frame the arm was built in.
251
+ *
252
+ * **The arm moved into the boom's basis and the aim did not, and that half-migration is what this
253
+ * closes.** `update` placed the eye using `boomRight`/`boomUp`/`boomForward` and then set
254
+ * `cam.yaw`, `cam.pitch` and `cam.roll` — which `Camera.updateMatrices` reads against the *world*
255
+ * axes. The two agree only while up is world Y. With up at +X, an arm built at yaw 0 lies along
256
+ * the frame's forward while a camera at yaw 0 looks down world −Z: a right angle apart, so the
257
+ * rig put the eye in the right place and rendered the scene beside the subject, with no error
258
+ * anywhere. Reported from outside, where recovering the aim meant inverting this rig's own boom
259
+ * formula from outside it, against a sign convention nothing stated.
260
+ *
261
+ * **Derived rather than taken, so `update`'s signature is unchanged** — the same property R2 held
262
+ * to when it added `setBoomUp` rather than a `basis` parameter.
263
+ *
264
+ * The decomposition is exact and is the inverse of `updateMatrices`' own construction: forward
265
+ * fixes yaw and pitch, and the roll is the angle from the basis that construction would build at
266
+ * those two onto the up the arm was built against. **At the world basis every line here returns
267
+ * what was passed in**, which is asserted rather than assumed — `up` is world Y orthogonalised
268
+ * against forward, which is precisely the up `updateMatrices` derives, so the base roll is zero
269
+ * and the caller's damped roll is all that is left.
270
+ */
271
+ private aimAlongArm;
272
+ }