@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,727 @@
1
+ /**
2
+ * A transform gizmo: what a ray is over, what a drag does to a transform, and the lines
3
+ * that draw it.
4
+ *
5
+ * **A generator and not a pass**, which is the argument `debugLines.ts` makes and which
6
+ * holds here with more force. `drawLines` has been on both backends since the polyline
7
+ * batch landed; what a gizmo adds is the arithmetic. Nothing in this file touches a
8
+ * context, so one implementation answers for WebGL2 and WebGPU alike and every test runs
9
+ * without either.
10
+ *
11
+ * **It says what, and dispatches nothing.** `registerPickable` settled this for picking
12
+ * and the same reasoning applies: enter, leave, capture and the difference between a click
13
+ * and a drag belong to the consumer, which already has that logic for anything with a drag
14
+ * in it. This is asked what a ray is over, and told when a drag begins, moves and ends.
15
+ *
16
+ * **It does not own the transform it edits.** `position`, `rotation` and `scale` are here
17
+ * because a drag has to put its answer somewhere; the caller copies them onto whatever it
18
+ * actually moves. A gizmo reaching into a `SceneNode` would be render code mutating scene
19
+ * state, which `ARCHITECTURE.md` forbids.
20
+ *
21
+ * **Nothing here throws and nothing allocates after construction**, for the reason
22
+ * `DebugLines` gives: a tool that threw would take the frame down at the moment somebody
23
+ * was trying to move something.
24
+ *
25
+ * A caller wires it in four lines:
26
+ *
27
+ * ```ts
28
+ * camera.rayThrough(origin, direction, cssX, cssY, cssWidth, cssHeight);
29
+ * gizmo.size = gizmoScaleFor(camera, gizmo.position, cssHeight, 90);
30
+ * if (down && !wasDown) gizmo.beginDrag(origin, direction);
31
+ * else if (down) gizmo.updateDrag(origin, direction);
32
+ * else { gizmo.endDrag(); gizmo.hover(origin, direction); }
33
+ * ```
34
+ */
35
+ import { quat, vec3 } from 'gl-matrix';
36
+ import { rayClosestOnLine, rayPlane, raySphere } from '../math/intersect.js';
37
+ import { createLineSegments } from './linePoints.js';
38
+ export const GIZMO_NONE = 0;
39
+ export const GIZMO_TRANSLATE_X = 1;
40
+ export const GIZMO_TRANSLATE_Y = 2;
41
+ export const GIZMO_TRANSLATE_Z = 3;
42
+ /** The plane handles are named for the axes they slide in, so `YZ` is normal to x. */
43
+ export const GIZMO_TRANSLATE_YZ = 4;
44
+ export const GIZMO_TRANSLATE_ZX = 5;
45
+ export const GIZMO_TRANSLATE_XY = 6;
46
+ export const GIZMO_ROTATE_X = 7;
47
+ export const GIZMO_ROTATE_Y = 8;
48
+ export const GIZMO_ROTATE_Z = 9;
49
+ export const GIZMO_SCALE_X = 10;
50
+ export const GIZMO_SCALE_Y = 11;
51
+ export const GIZMO_SCALE_Z = 12;
52
+ export const GIZMO_SCALE_UNIFORM = 13;
53
+ /** Buffer indices. Three axes, one neutral, one for whatever is highlighted. */
54
+ export const GIZMO_GROUP_X = 0;
55
+ export const GIZMO_GROUP_Y = 1;
56
+ export const GIZMO_GROUP_Z = 2;
57
+ export const GIZMO_GROUP_NEUTRAL = 3;
58
+ export const GIZMO_GROUP_ACTIVE = 4;
59
+ export const GIZMO_GROUP_COUNT = 5;
60
+ /**
61
+ * A colour per group, in the order the groups are indexed.
62
+ *
63
+ * Exported as data rather than baked into a draw call because this file draws nothing.
64
+ * A consumer with its own palette overrides them and nothing here notices.
65
+ */
66
+ export const GIZMO_GROUP_COLORS = [
67
+ [0.9, 0.25, 0.25],
68
+ [0.35, 0.85, 0.3],
69
+ [0.3, 0.5, 0.95],
70
+ [0.75, 0.75, 0.78],
71
+ [1.0, 0.85, 0.2],
72
+ ];
73
+ /* Every length below is a fraction of `size`, so the whole gizmo scales as one thing. */
74
+ const ARM_START = 0.15;
75
+ const ARM_END = 1.0;
76
+ const ARM_PICK_RADIUS = 0.08;
77
+ const HEAD_LENGTH = 0.2;
78
+ const HEAD_RADIUS = 0.06;
79
+ const PLANE_INNER = 0.28;
80
+ const PLANE_OUTER = 0.58;
81
+ const RING_RADIUS = 1.0;
82
+ const RING_PICK_HALF_WIDTH = 0.07;
83
+ /** Inside this radius a ring drag's angle is noise, so the drag holds what it had. */
84
+ const RING_MIN_GRAB = 0.2;
85
+ const CENTRE_RADIUS = 0.13;
86
+ const TIP_RADIUS = 0.07;
87
+ /** A scale can be driven small but never to zero, which is not invertible, or negative. */
88
+ const MIN_SCALE = 0.01;
89
+ const TWO_PI = Math.PI * 2;
90
+ const BASIS = [
91
+ [1, 0, 0],
92
+ [0, 1, 0],
93
+ [0, 0, 1],
94
+ ];
95
+ /**
96
+ * The world size that covers `pixels` screen pixels at the target's distance.
97
+ *
98
+ * A separate function rather than a method, which is what keeps every intersection and
99
+ * every drag in this file testable against a bare ray: the gizmo never learns what a
100
+ * camera is. A caller assigns the result to `size` once a frame.
101
+ *
102
+ * Perspective only, because `Camera` is. An orthographic camera's answer does not depend
103
+ * on distance at all, and the day one exists this grows a branch rather than a caller.
104
+ */
105
+ export function gizmoScaleFor(camera, target, cssHeight, pixels) {
106
+ const dx = target[0] - camera.position[0];
107
+ const dy = target[1] - camera.position[1];
108
+ const dz = target[2] - camera.position[2];
109
+ const distance = Math.hypot(dx, dy, dz);
110
+ const halfFov = (camera.fovYDeg * Math.PI) / 360;
111
+ const worldPerPixel = (2 * distance * Math.tan(halfFov)) / Math.max(cssHeight, 1);
112
+ return worldPerPixel * pixels;
113
+ }
114
+ export class Gizmo {
115
+ mode = 'translate';
116
+ space = 'world';
117
+ /** The gizmo's own world size. See `gizmoScaleFor`. Non-positive draws and picks nothing. */
118
+ size = 1;
119
+ /** The transform being edited. Written by a drag; the caller copies it where it belongs. */
120
+ position = new Float32Array(3);
121
+ /** A quaternion, `xyzw`, identity at construction. */
122
+ rotation = new Float32Array([0, 0, 0, 1]);
123
+ scale = new Float32Array([1, 1, 1]);
124
+ groups = [];
125
+ ringSegments;
126
+ /**
127
+ * The basis the handles point along, rebuilt on every pick and frozen for a drag.
128
+ *
129
+ * Three standing `Float32Array`s rather than one of nine with a `subarray` per read:
130
+ * `subarray` allocates a view object, and these are read several times per handle per
131
+ * pointer move.
132
+ */
133
+ axes = [new Float32Array(3), new Float32Array(3), new Float32Array(3)];
134
+ dragAxes = [new Float32Array(3), new Float32Array(3), new Float32Array(3)];
135
+ hoveredHandle = GIZMO_NONE;
136
+ activeHandle = GIZMO_NONE;
137
+ /* Anchors, all captured by `beginDrag` and read by `updateDrag`. */
138
+ grabPosition = new Float32Array(3);
139
+ grabRotation = new Float32Array(4);
140
+ grabScale = new Float32Array(3);
141
+ grabPoint = new Float32Array(3);
142
+ grabViewNormal = new Float32Array(3);
143
+ grabParam = 0;
144
+ grabRadius = 0;
145
+ previousAngle = 0;
146
+ accumulated = 0;
147
+ /* Scratch, so a pointer move allocates nothing. */
148
+ closest = new Float32Array(3);
149
+ point = new Float32Array(3);
150
+ offset = new Float32Array(3);
151
+ turn = new Float32Array(4);
152
+ corners = new Float32Array(18);
153
+ /**
154
+ * `ringSegments` is the resolution of a rotation ring, and it also sets every buffer's
155
+ * capacity because a ring is the largest thing any one of them holds.
156
+ */
157
+ constructor(ringSegments = 48) {
158
+ if (!(ringSegments >= 8))
159
+ throw new Error(`Gizmo: ringSegments must be at least 8, got ${ringSegments}`);
160
+ this.ringSegments = Math.floor(ringSegments);
161
+ const capacity = this.ringSegments + 16;
162
+ for (let group = 0; group < GIZMO_GROUP_COUNT; group++)
163
+ this.groups.push(createLineSegments(capacity));
164
+ }
165
+ /** What a `hover` last found, or `GIZMO_NONE`. */
166
+ get hovered() {
167
+ return this.hoveredHandle;
168
+ }
169
+ /** The handle a drag is on, or `GIZMO_NONE`. */
170
+ get active() {
171
+ return this.activeHandle;
172
+ }
173
+ get dragging() {
174
+ return this.activeHandle !== GIZMO_NONE;
175
+ }
176
+ /**
177
+ * How far the current rotation drag has turned, in radians, signed and unbounded.
178
+ *
179
+ * **This is the only place the unwrap in `dragRing` is observable, and that is not
180
+ * obvious.** The orientation is not: `quat.setAxisAngle` is 2π-periodic and a quaternion
181
+ * double-covers the rotations, so an accumulated angle that is wrong by a whole turn
182
+ * produces the same orientation, negated — which is the same rotation. What the unwrap
183
+ * buys is a continuous *number*: a readout that says 270° rather than −90°, and a caller
184
+ * that wants to snap to fifteen degrees or stop at a limit, both of which need the turn
185
+ * and not the pose. Zero when no rotation drag is running.
186
+ */
187
+ get dragAngle() {
188
+ return this.activeHandle >= GIZMO_ROTATE_X && this.activeHandle <= GIZMO_ROTATE_Z
189
+ ? this.accumulated
190
+ : 0;
191
+ }
192
+ /** One group's geometry, filled by the last `build`. Draw it with `GIZMO_GROUP_COLORS[group]`. */
193
+ segments(group) {
194
+ const at = this.groups[group];
195
+ if (at === undefined)
196
+ throw new Error(`Gizmo: no group ${group}`);
197
+ return at;
198
+ }
199
+ /**
200
+ * The handle a ray is over, or `GIZMO_NONE`. No side effects; `hover` is the one that
201
+ * remembers.
202
+ *
203
+ * **Nearest along the ray wins, except that the centre handle wins outright**, which is
204
+ * one documented exception rather than a priority table: a priority table would let a
205
+ * plane handle behind the camera beat an arm in front of it, which a user sees as a
206
+ * click landing on the wrong thing.
207
+ *
208
+ * **As the radii stand the exception decides nothing**, and that is worth saying rather
209
+ * than implying otherwise: an arm's pick cylinder starts at `ARM_START` of the size and
210
+ * the centre's sphere ends at `CENTRE_RADIUS`, which is smaller, so the two regions do
211
+ * not meet. The ordering is what keeps a later change to either radius from quietly
212
+ * producing a centre nobody can click, which is the failure it is here to prevent.
213
+ *
214
+ * `direction` must be unit length. `camera.rayThrough` gives one.
215
+ */
216
+ pick(origin, direction) {
217
+ if (!(this.size > 0))
218
+ return GIZMO_NONE;
219
+ this.refreshAxes(this.axes);
220
+ if (this.mode === 'scale') {
221
+ const centre = raySphere(origin, direction, this.position, this.size * CENTRE_RADIUS);
222
+ if (centre >= 0)
223
+ return GIZMO_SCALE_UNIFORM;
224
+ }
225
+ let best = Infinity;
226
+ let handle = GIZMO_NONE;
227
+ for (let axis = 0; axis < 3; axis++) {
228
+ if (this.mode === 'rotate') {
229
+ const t = this.pickRing(origin, direction, axis, this.axes);
230
+ if (t >= 0 && t < best) {
231
+ best = t;
232
+ handle = GIZMO_ROTATE_X + axis;
233
+ }
234
+ continue;
235
+ }
236
+ const arm = this.pickArm(origin, direction, axis, this.axes);
237
+ if (arm >= 0 && arm < best) {
238
+ best = arm;
239
+ handle = (this.mode === 'translate' ? GIZMO_TRANSLATE_X : GIZMO_SCALE_X) + axis;
240
+ }
241
+ if (this.mode === 'translate') {
242
+ const plane = this.pickPlane(origin, direction, axis, this.axes);
243
+ if (plane >= 0 && plane < best) {
244
+ best = plane;
245
+ handle = GIZMO_TRANSLATE_YZ + axis;
246
+ }
247
+ }
248
+ }
249
+ return handle;
250
+ }
251
+ /** `pick`, remembered. Returns what it found. Ignored while a drag is running. */
252
+ hover(origin, direction) {
253
+ if (this.dragging)
254
+ return this.activeHandle;
255
+ this.hoveredHandle = this.pick(origin, direction);
256
+ return this.hoveredHandle;
257
+ }
258
+ /**
259
+ * Grab whatever the ray is over. Returns whether a drag started.
260
+ *
261
+ * **The transform and the axes are both captured here and neither is re-read until the
262
+ * drag ends.** Recomputing the basis from a rotation the drag is changing feeds the
263
+ * answer back into its own input, and what that looks like is a ring that accelerates
264
+ * away from the pointer.
265
+ *
266
+ * A grab whose anchor cannot be computed — a ray parallel to the axis it is grabbing —
267
+ * refuses rather than starting a drag with an arbitrary origin.
268
+ */
269
+ beginDrag(origin, direction) {
270
+ const handle = this.pick(origin, direction);
271
+ if (handle === GIZMO_NONE)
272
+ return false;
273
+ for (let axis = 0; axis < 3; axis++)
274
+ this.dragAxes[axis].set(this.axes[axis]);
275
+ this.grabPosition.set(this.position);
276
+ this.grabRotation.set(this.rotation);
277
+ this.grabScale.set(this.scale);
278
+ this.accumulated = 0;
279
+ if (!this.anchor(handle, origin, direction))
280
+ return false;
281
+ this.activeHandle = handle;
282
+ this.hoveredHandle = handle;
283
+ return true;
284
+ }
285
+ /**
286
+ * Move the drag. Returns whether the transform changed.
287
+ *
288
+ * **Every answer is absolute, computed from the anchor rather than accumulated from the
289
+ * last call**, so a drag cannot drift however many frames it runs for. Rotation is the
290
+ * one exception and §5 of the design says why: an angle has to be unwrapped against the
291
+ * previous one to survive the seam at ±π, so the total is accumulated and the *total* is
292
+ * what the transform is built from.
293
+ *
294
+ * **A degenerate ray keeps the previous value rather than producing one.** The
295
+ * alternative is the object teleporting at the moment the pointer crosses the plane it
296
+ * is dragging in, which is the single most annoying thing a gizmo can do.
297
+ */
298
+ updateDrag(origin, direction) {
299
+ const handle = this.activeHandle;
300
+ if (handle === GIZMO_NONE)
301
+ return false;
302
+ if (handle >= GIZMO_TRANSLATE_X && handle <= GIZMO_TRANSLATE_Z) {
303
+ return this.dragAlongArm(origin, direction, handle - GIZMO_TRANSLATE_X, true);
304
+ }
305
+ if (handle >= GIZMO_TRANSLATE_YZ && handle <= GIZMO_TRANSLATE_XY) {
306
+ return this.dragInPlane(origin, direction, handle - GIZMO_TRANSLATE_YZ);
307
+ }
308
+ if (handle >= GIZMO_ROTATE_X && handle <= GIZMO_ROTATE_Z) {
309
+ return this.dragRing(origin, direction, handle - GIZMO_ROTATE_X);
310
+ }
311
+ if (handle >= GIZMO_SCALE_X && handle <= GIZMO_SCALE_Z) {
312
+ return this.dragAlongArm(origin, direction, handle - GIZMO_SCALE_X, false);
313
+ }
314
+ return this.dragUniform(origin, direction);
315
+ }
316
+ /** Let go. Safe to call on a frame with no drag running. */
317
+ endDrag() {
318
+ this.activeHandle = GIZMO_NONE;
319
+ }
320
+ /**
321
+ * Fill the five buffers for this frame's mode, transform and highlight.
322
+ *
323
+ * Cheap enough to call every frame — a rotation ring at the default resolution is 48
324
+ * segments of arithmetic — and it has to be, because the highlight changes with the
325
+ * pointer.
326
+ */
327
+ build() {
328
+ for (const group of this.groups)
329
+ group.count = 0;
330
+ if (!(this.size > 0))
331
+ return;
332
+ /* A running drag draws against the basis it grabbed. Refreshing it here would undo the
333
+ * freeze `beginDrag` took, and a local-space ring would chase its own rotation. */
334
+ if (!this.dragging)
335
+ this.refreshAxes(this.axes);
336
+ const axes = this.dragging ? this.dragAxes : this.axes;
337
+ const lit = this.dragging ? this.activeHandle : this.hoveredHandle;
338
+ if (this.mode === 'translate') {
339
+ for (let axis = 0; axis < 3; axis++) {
340
+ this.buildArm(axis, axes, this.groupFor(GIZMO_TRANSLATE_X + axis, axis, lit), true);
341
+ this.buildPlane(axis, axes, this.groupFor(GIZMO_TRANSLATE_YZ + axis, axis, lit));
342
+ }
343
+ return;
344
+ }
345
+ if (this.mode === 'rotate') {
346
+ for (let axis = 0; axis < 3; axis++) {
347
+ this.buildRing(axis, axes, this.groupFor(GIZMO_ROTATE_X + axis, axis, lit));
348
+ }
349
+ return;
350
+ }
351
+ for (let axis = 0; axis < 3; axis++) {
352
+ this.buildArm(axis, axes, this.groupFor(GIZMO_SCALE_X + axis, axis, lit), false);
353
+ }
354
+ this.buildOctahedron(this.position[0], this.position[1], this.position[2], this.size * CENTRE_RADIUS, axes, lit === GIZMO_SCALE_UNIFORM ? GIZMO_GROUP_ACTIVE : GIZMO_GROUP_NEUTRAL);
355
+ }
356
+ /** A handle's own colour group, unless it is the one lit. */
357
+ groupFor(handle, axis, lit) {
358
+ return handle === lit ? GIZMO_GROUP_ACTIVE : axis;
359
+ }
360
+ /**
361
+ * The basis the handles point along.
362
+ *
363
+ * **Scale is always local whatever `space` says.** A non-uniform scale along a world
364
+ * axis is not representable in a translation-rotation-scale transform, so a gizmo
365
+ * offering it would shear the object and call it scaling.
366
+ */
367
+ refreshAxes(into) {
368
+ const local = this.space === 'local' || this.mode === 'scale';
369
+ for (let axis = 0; axis < 3; axis++) {
370
+ const source = BASIS[axis];
371
+ const target = into[axis];
372
+ if (local)
373
+ vec3.transformQuat(target, source, this.rotation);
374
+ else
375
+ target.set(source);
376
+ }
377
+ }
378
+ /**
379
+ * Where a ray meets an arm's cylinder, or `-1`.
380
+ *
381
+ * The region is a cylinder without caps: a closest point past either end of the segment
382
+ * is a miss rather than being clamped to the cap. It costs a sliver of pickable area at
383
+ * the two ends of a handle a user aims at the middle of, and it keeps this to one
384
+ * intersection.
385
+ */
386
+ pickArm(origin, direction, axis, axes) {
387
+ const ray = this.closest;
388
+ if (!rayClosestOnLine(origin, direction, this.position, axes[axis], ray)) {
389
+ return -1;
390
+ }
391
+ const along = ray[1];
392
+ if (along < this.size * ARM_START || along > this.size * ARM_END)
393
+ return -1;
394
+ if (ray[2] > this.size * ARM_PICK_RADIUS)
395
+ return -1;
396
+ const distance = ray[0];
397
+ return distance >= 0 ? distance : -1;
398
+ }
399
+ /**
400
+ * Where a ray meets a plane handle's quad, or `-1`.
401
+ *
402
+ * The quad sits in the positive quadrant of its two axes and stays there. Following the
403
+ * camera into whichever quadrant faces it is what a mature editor does and it is a
404
+ * second thing to get right; a fixed quadrant is honest and is visible from where it is.
405
+ */
406
+ pickPlane(origin, direction, normalAxis, axes) {
407
+ const normal = axes[normalAxis];
408
+ const distance = rayPlane(origin, direction, this.position, normal);
409
+ if (distance < 0)
410
+ return -1;
411
+ this.offsetAt(origin, direction, distance);
412
+ const first = (normalAxis + 1) % 3;
413
+ const second = (normalAxis + 2) % 3;
414
+ const a = this.along(first, axes);
415
+ const b = this.along(second, axes);
416
+ const inner = this.size * PLANE_INNER;
417
+ const outer = this.size * PLANE_OUTER;
418
+ if (a < inner || a > outer || b < inner || b > outer)
419
+ return -1;
420
+ return distance;
421
+ }
422
+ /** Where a ray meets a rotation ring's annulus, or `-1`. */
423
+ pickRing(origin, direction, axis, axes) {
424
+ const normal = axes[axis];
425
+ const distance = rayPlane(origin, direction, this.position, normal);
426
+ if (distance < 0)
427
+ return -1;
428
+ this.offsetAt(origin, direction, distance);
429
+ const radius = Math.hypot(this.offset[0], this.offset[1], this.offset[2]);
430
+ if (Math.abs(radius - this.size * RING_RADIUS) > this.size * RING_PICK_HALF_WIDTH)
431
+ return -1;
432
+ return distance;
433
+ }
434
+ /** Capture whatever the handle being grabbed needs. `false` refuses the drag. */
435
+ anchor(handle, origin, direction) {
436
+ if (handle >= GIZMO_TRANSLATE_X && handle <= GIZMO_TRANSLATE_Z) {
437
+ return this.anchorArm(origin, direction, handle - GIZMO_TRANSLATE_X);
438
+ }
439
+ if (handle >= GIZMO_TRANSLATE_YZ && handle <= GIZMO_TRANSLATE_XY) {
440
+ return this.anchorPlane(origin, direction, handle - GIZMO_TRANSLATE_YZ);
441
+ }
442
+ if (handle >= GIZMO_ROTATE_X && handle <= GIZMO_ROTATE_Z) {
443
+ return this.anchorRing(origin, direction, handle - GIZMO_ROTATE_X);
444
+ }
445
+ if (handle >= GIZMO_SCALE_X && handle <= GIZMO_SCALE_Z) {
446
+ return this.anchorArm(origin, direction, handle - GIZMO_SCALE_X);
447
+ }
448
+ return this.anchorUniform(origin, direction);
449
+ }
450
+ anchorArm(origin, direction, axis) {
451
+ const ray = this.closest;
452
+ const line = this.dragAxes[axis];
453
+ if (!rayClosestOnLine(origin, direction, this.grabPosition, line, ray))
454
+ return false;
455
+ this.grabParam = ray[1];
456
+ return true;
457
+ }
458
+ anchorPlane(origin, direction, normalAxis) {
459
+ const normal = this.dragAxes[normalAxis];
460
+ const distance = rayPlane(origin, direction, this.grabPosition, normal);
461
+ if (distance < 0)
462
+ return false;
463
+ this.grabPoint[0] = origin[0] + direction[0] * distance;
464
+ this.grabPoint[1] = origin[1] + direction[1] * distance;
465
+ this.grabPoint[2] = origin[2] + direction[2] * distance;
466
+ return true;
467
+ }
468
+ anchorRing(origin, direction, axis) {
469
+ const angle = this.ringAngle(origin, direction, axis);
470
+ if (angle === null)
471
+ return false;
472
+ this.previousAngle = angle;
473
+ return true;
474
+ }
475
+ anchorUniform(origin, direction) {
476
+ /* The view plane at the moment of grabbing: the pointer's own direction is its normal,
477
+ * which is the view direction at that point and asks nothing of a camera. */
478
+ this.grabViewNormal[0] = direction[0];
479
+ this.grabViewNormal[1] = direction[1];
480
+ this.grabViewNormal[2] = direction[2];
481
+ const distance = rayPlane(origin, direction, this.grabPosition, this.grabViewNormal);
482
+ if (distance < 0)
483
+ return false;
484
+ this.offsetAt(origin, direction, distance);
485
+ this.grabRadius = Math.hypot(this.offset[0], this.offset[1], this.offset[2]);
486
+ return true;
487
+ }
488
+ /** Translate along an arm, or scale along it. One intersection answers both. */
489
+ dragAlongArm(origin, direction, axis, translate) {
490
+ const ray = this.closest;
491
+ const line = this.dragAxes[axis];
492
+ if (!rayClosestOnLine(origin, direction, this.grabPosition, line, ray))
493
+ return false;
494
+ const moved = ray[1] - this.grabParam;
495
+ if (translate) {
496
+ for (let component = 0; component < 3; component++) {
497
+ this.position[component] =
498
+ this.grabPosition[component] + line[component] * moved;
499
+ }
500
+ return true;
501
+ }
502
+ this.scale[axis] = Math.max(this.grabScale[axis] * (1 + moved / this.size), MIN_SCALE);
503
+ return true;
504
+ }
505
+ dragInPlane(origin, direction, normalAxis) {
506
+ const normal = this.dragAxes[normalAxis];
507
+ const distance = rayPlane(origin, direction, this.grabPosition, normal);
508
+ if (distance < 0)
509
+ return false;
510
+ for (let component = 0; component < 3; component++) {
511
+ const hit = origin[component] + direction[component] * distance;
512
+ this.position[component] =
513
+ this.grabPosition[component] + (hit - this.grabPoint[component]);
514
+ }
515
+ return true;
516
+ }
517
+ /**
518
+ * Turn about a ring.
519
+ *
520
+ * **`atan2` answers in `(−π, π]`, so a drag crossing the seam reads as a jump of nearly
521
+ * a full turn.** Each update is unwrapped against the previous angle and the total
522
+ * accumulates, which is what makes a three-quarter turn a three-quarter turn instead of
523
+ * a quarter the other way — in the number. See `dragAngle` for why the orientation
524
+ * cannot show the difference, and why the unwrap is still not dead code.
525
+ */
526
+ dragRing(origin, direction, axis) {
527
+ const angle = this.ringAngle(origin, direction, axis);
528
+ if (angle === null)
529
+ return false;
530
+ let delta = angle - this.previousAngle;
531
+ if (delta > Math.PI)
532
+ delta -= TWO_PI;
533
+ else if (delta < -Math.PI)
534
+ delta += TWO_PI;
535
+ this.previousAngle = angle;
536
+ this.accumulated += delta;
537
+ quat.setAxisAngle(this.turn, this.dragAxes[axis], this.accumulated);
538
+ quat.multiply(this.rotation, this.turn, this.grabRotation);
539
+ return true;
540
+ }
541
+ dragUniform(origin, direction) {
542
+ const distance = rayPlane(origin, direction, this.grabPosition, this.grabViewNormal);
543
+ if (distance < 0)
544
+ return false;
545
+ this.offsetAt(origin, direction, distance);
546
+ const radius = Math.hypot(this.offset[0], this.offset[1], this.offset[2]);
547
+ const factor = 1 + (radius - this.grabRadius) / this.size;
548
+ for (let component = 0; component < 3; component++) {
549
+ this.scale[component] = Math.max(this.grabScale[component] * factor, MIN_SCALE);
550
+ }
551
+ return true;
552
+ }
553
+ /**
554
+ * The angle a ray makes in a ring's plane, or `null` when there is none to speak of.
555
+ *
556
+ * Near the centre the hit is a point whose angle is dominated by whatever the last
557
+ * floating-point bit did, so a drag there would spin. Refusing keeps what the drag had.
558
+ */
559
+ ringAngle(origin, direction, axis) {
560
+ const normal = this.dragAxes[axis];
561
+ const distance = rayPlane(origin, direction, this.grabPosition, normal);
562
+ if (distance < 0)
563
+ return null;
564
+ for (let component = 0; component < 3; component++) {
565
+ this.offset[component] =
566
+ origin[component] +
567
+ direction[component] * distance -
568
+ this.grabPosition[component];
569
+ }
570
+ const radius = Math.hypot(this.offset[0], this.offset[1], this.offset[2]);
571
+ if (radius < this.size * RING_MIN_GRAB)
572
+ return null;
573
+ const first = (axis + 1) % 3;
574
+ const second = (axis + 2) % 3;
575
+ return Math.atan2(this.along(second, this.dragAxes), this.along(first, this.dragAxes));
576
+ }
577
+ /** `offset` becomes the vector from the gizmo to the ray's point at `distance`. */
578
+ offsetAt(origin, direction, distance) {
579
+ for (let component = 0; component < 3; component++) {
580
+ this.offset[component] =
581
+ origin[component] +
582
+ direction[component] * distance -
583
+ this.position[component];
584
+ }
585
+ }
586
+ /** How far `offset` reaches along one of the axes. */
587
+ along(axis, axes) {
588
+ const vector = axes[axis];
589
+ return (this.offset[0] * vector[0] +
590
+ this.offset[1] * vector[1] +
591
+ this.offset[2] * vector[2]);
592
+ }
593
+ emit(group, ax, ay, az, bx, by, bz) {
594
+ const target = this.groups[group];
595
+ if (target === undefined)
596
+ return;
597
+ const at = target.count;
598
+ /* Discarded rather than thrown, for the reason `DebugLines.dropped` exists. */
599
+ if (at >= target.capacity)
600
+ return;
601
+ target.from[at * 3] = ax;
602
+ target.from[at * 3 + 1] = ay;
603
+ target.from[at * 3 + 2] = az;
604
+ target.to[at * 3] = bx;
605
+ target.to[at * 3 + 1] = by;
606
+ target.to[at * 3 + 2] = bz;
607
+ target.count = at + 1;
608
+ }
609
+ /** `point` becomes the gizmo origin plus a combination of the three axes. */
610
+ at(axes, a, u, b, v, c, w) {
611
+ const first = axes[a];
612
+ const second = axes[b];
613
+ const third = axes[c];
614
+ for (let component = 0; component < 3; component++) {
615
+ this.point[component] =
616
+ this.position[component] +
617
+ first[component] * u +
618
+ second[component] * v +
619
+ third[component] * w;
620
+ }
621
+ }
622
+ buildArm(axis, axes, group, arrow) {
623
+ const first = (axis + 1) % 3;
624
+ const second = (axis + 2) % 3;
625
+ const tip = this.size * ARM_END;
626
+ const base = arrow ? tip - this.size * HEAD_LENGTH : tip - this.size * TIP_RADIUS;
627
+ this.at(axes, axis, this.size * ARM_START, first, 0, second, 0);
628
+ const sx = this.point[0], sy = this.point[1], sz = this.point[2];
629
+ this.at(axes, axis, base, first, 0, second, 0);
630
+ this.emit(group, sx, sy, sz, this.point[0], this.point[1], this.point[2]);
631
+ if (!arrow) {
632
+ this.at(axes, axis, tip, first, 0, second, 0);
633
+ this.buildOctahedron(this.point[0], this.point[1], this.point[2], this.size * TIP_RADIUS, axes, group);
634
+ return;
635
+ }
636
+ /* A four-spoke cone: the tip to four points around the base, and the base square. */
637
+ this.at(axes, axis, tip, first, 0, second, 0);
638
+ const tx = this.point[0], ty = this.point[1], tz = this.point[2];
639
+ const radius = this.size * HEAD_RADIUS;
640
+ let px = 0, py = 0, pz = 0;
641
+ for (let corner = 0; corner < 4; corner++) {
642
+ const angle = (corner / 4) * TWO_PI;
643
+ this.at(axes, axis, base, first, Math.cos(angle) * radius, second, Math.sin(angle) * radius);
644
+ const cx = this.point[0], cy = this.point[1], cz = this.point[2];
645
+ this.emit(group, tx, ty, tz, cx, cy, cz);
646
+ if (corner > 0)
647
+ this.emit(group, px, py, pz, cx, cy, cz);
648
+ if (corner === 3) {
649
+ this.at(axes, axis, base, first, radius, second, 0);
650
+ this.emit(group, cx, cy, cz, this.point[0], this.point[1], this.point[2]);
651
+ }
652
+ px = cx;
653
+ py = cy;
654
+ pz = cz;
655
+ }
656
+ }
657
+ buildPlane(normalAxis, axes, group) {
658
+ const first = (normalAxis + 1) % 3;
659
+ const second = (normalAxis + 2) % 3;
660
+ const inner = this.size * PLANE_INNER;
661
+ const outer = this.size * PLANE_OUTER;
662
+ let px = 0, py = 0, pz = 0;
663
+ let fx = 0, fy = 0, fz = 0;
664
+ for (let corner = 0; corner < 4; corner++) {
665
+ const u = corner === 1 || corner === 2 ? outer : inner;
666
+ const v = corner >= 2 ? outer : inner;
667
+ this.at(axes, first, u, second, v, normalAxis, 0);
668
+ const cx = this.point[0], cy = this.point[1], cz = this.point[2];
669
+ if (corner === 0) {
670
+ fx = cx;
671
+ fy = cy;
672
+ fz = cz;
673
+ }
674
+ else {
675
+ this.emit(group, px, py, pz, cx, cy, cz);
676
+ }
677
+ if (corner === 3)
678
+ this.emit(group, cx, cy, cz, fx, fy, fz);
679
+ px = cx;
680
+ py = cy;
681
+ pz = cz;
682
+ }
683
+ }
684
+ buildRing(axis, axes, group) {
685
+ const first = (axis + 1) % 3;
686
+ const second = (axis + 2) % 3;
687
+ const radius = this.size * RING_RADIUS;
688
+ let px = 0, py = 0, pz = 0;
689
+ for (let step = 0; step <= this.ringSegments; step++) {
690
+ const angle = (step / this.ringSegments) * TWO_PI;
691
+ this.at(axes, first, Math.cos(angle) * radius, second, Math.sin(angle) * radius, axis, 0);
692
+ const cx = this.point[0], cy = this.point[1], cz = this.point[2];
693
+ if (step > 0)
694
+ this.emit(group, px, py, pz, cx, cy, cz);
695
+ px = cx;
696
+ py = cy;
697
+ pz = cz;
698
+ }
699
+ }
700
+ /**
701
+ * Six vertices on the axes and the twelve edges between them.
702
+ *
703
+ * Drawn as an octahedron and picked as a sphere of the same radius, so the region that
704
+ * responds is slightly larger than the shape — which errs toward being easy to grab.
705
+ */
706
+ buildOctahedron(cx, cy, cz, radius, axes, group) {
707
+ const vertices = this.corners;
708
+ for (let axis = 0; axis < 3; axis++) {
709
+ const vector = axes[axis];
710
+ for (let component = 0; component < 3; component++) {
711
+ const offset = vector[component] * radius;
712
+ const centre = component === 0 ? cx : component === 1 ? cy : cz;
713
+ vertices[axis * 6 + component] = centre + offset;
714
+ vertices[axis * 6 + 3 + component] = centre - offset;
715
+ }
716
+ }
717
+ /* Every +/- vertex of one axis joins every +/- vertex of the next: four edges a pair. */
718
+ for (let axis = 0; axis < 3; axis++) {
719
+ const next = (axis + 1) % 3;
720
+ for (let a = 0; a < 2; a++) {
721
+ for (let b = 0; b < 2; b++) {
722
+ this.emit(group, vertices[axis * 6 + a * 3], vertices[axis * 6 + a * 3 + 1], vertices[axis * 6 + a * 3 + 2], vertices[next * 6 + b * 3], vertices[next * 6 + b * 3 + 1], vertices[next * 6 + b * 3 + 2]);
723
+ }
724
+ }
725
+ }
726
+ }
727
+ }