@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
+ /** Every probe in a grid as one array texture, and the scratch a bake fills it through. */
2
+
3
+ import { ggxMaxLevelFor, irradianceLevelFor, roughnessForLevel } from './prefilterEnvMap.ts';
4
+
5
+ /**
6
+ * What one level of one layer is for, since the chain carries two different integrals.
7
+ *
8
+ * Levels up to `ggxMaxLevel` are the reflection, convolved against the GGX lobe at the roughness
9
+ * `roughnessForLevel` gives them. The level above that is the diffuse ambient, convolved against
10
+ * the cosine. They are the same pass with a different weight, and telling them apart is a uniform.
11
+ */
12
+ export type ProbeLevelKind = 'radiance' | 'irradiance';
13
+
14
+ /**
15
+ * Every probe of a grid as one `TEXTURE_2D_ARRAY` of octahedral maps.
16
+ *
17
+ * **One binding for any number of probes, which is the whole design.** GLSL ES cannot index a
18
+ * sampler array with a non-constant expression, so a grid of cubes would need a `samplerCube` each
19
+ * and a branch chain over them — the shape twelve point-shadow cubemaps had before
20
+ * `pointShadowArray.ts`, and the reason that file exists. A layer index has no such limit.
21
+ *
22
+ * **It replaces the `samplerCube` rather than joining it.** Fifteen of WebGL2's guaranteed sixteen
23
+ * texture units are spent, and `REFRACT_SCENE_TEXTURE_UNIT`'s comment says what the next sampler
24
+ * has to do about that: fold into an existing binding. This binds where the probe cube used to,
25
+ * and the irradiance level folds the diffuse term in beside the reflection, so the grid costs no
26
+ * units at all and unit 15 stays free.
27
+ *
28
+ * **The chain stops at the irradiance level.** `texStorage3D` may allocate fewer levels than a
29
+ * full chain, so there is nothing above it — a 256 edge is six levels rather than nine, and the
30
+ * levels that would have held one, four and sixteen texels are not allocated at all.
31
+ */
32
+ export class EnvProbeArray {
33
+ /** The array the lit pass samples. Octahedral, one layer a probe, gutter included. */
34
+ readonly texture: WebGLTexture;
35
+ /** Texels a side, including the one-texel gutter `octInsetUv` insets past. */
36
+ readonly edge: number;
37
+ readonly layers: number;
38
+ /** The coarsest level the reflection reaches, which is `uEnvironmentMaxLod`. */
39
+ readonly ggxMaxLevel: number;
40
+ /** The level holding the cosine convolution, one above the reflection's coarsest. */
41
+ readonly irradianceLevel: number;
42
+
43
+ private readonly framebuffer: WebGLFramebuffer;
44
+ /** One flag a layer, because a grid may be baked a probe at a time across frames. */
45
+ private readonly baked: Uint8Array;
46
+ private bakedCount = 0;
47
+ /**
48
+ * Set once if the allocation is refused, and never cleared.
49
+ *
50
+ * A grid is an improvement to an appearance rather than a requirement, exactly as one probe was:
51
+ * a device that cannot afford the layers keeps the sky-and-ground gradient and loses nothing
52
+ * else. Sixty-four layers at the default edge is 43.7 MB, which is affordable on the parts this
53
+ * engine targets and is not affordable everywhere.
54
+ */
55
+ private unusable = false;
56
+
57
+ constructor(gl: WebGL2RenderingContext, edge: number, layers: number, floatColor: boolean) {
58
+ this.edge = edge;
59
+ this.layers = Math.max(1, Math.trunc(layers));
60
+ this.ggxMaxLevel = ggxMaxLevelFor(edge);
61
+ this.irradianceLevel = irradianceLevelFor(edge);
62
+ this.baked = new Uint8Array(this.layers);
63
+
64
+ const texture = gl.createTexture();
65
+ if (texture === null) throw new Error('EnvProbeArray: createTexture failed');
66
+ this.texture = texture;
67
+
68
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, texture);
69
+ /*
70
+ * **Drained once before the allocation, because `getError` reports and clears.** Without this
71
+ * the check below answers for whatever happened earlier in the frame, and a grid would stand
72
+ * down over somebody else's mistake. One call rather than a loop: a context that answers an
73
+ * error forever is a context this would never leave.
74
+ */
75
+ gl.getError();
76
+ gl.texStorage3D(
77
+ gl.TEXTURE_2D_ARRAY,
78
+ /* Up to and including the irradiance level, and nothing above it. */
79
+ this.irradianceLevel + 1,
80
+ floatColor ? gl.RGBA16F : gl.RGBA8,
81
+ edge,
82
+ edge,
83
+ this.layers,
84
+ );
85
+ /*
86
+ * **`LINEAR_MIPMAP_NEAREST`, and the choice is a statement rather than a saving.** A level's
87
+ * gutter is one texel wide, so its inset in normalised coordinates is `1 / edge` and differs
88
+ * between levels; hardware trilinear applies one coordinate to both levels it blends, so one
89
+ * of the two would be read at the wrong inset — by a thirty-second of the map at the top of
90
+ * the chain. The shader fetches two levels at their own insets and mixes them, so the only
91
+ * filtering asked of the hardware is bilinear inside one level.
92
+ */
93
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
94
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
95
+ /*
96
+ * Clamped, and the gutter is what makes that correct. An octahedral map's border is a fold
97
+ * rather than an edge, so `CLAMP_TO_EDGE` repeating the last real texel would be wrong by
98
+ * 4.6e-2 in direction; the gutter holds the folded texel and the inset keeps every sample
99
+ * inside it, which is measured in `octahedral.test.ts`.
100
+ */
101
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
102
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
103
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
104
+
105
+ if (gl.getError() !== gl.NO_ERROR) {
106
+ this.unusable = true;
107
+ console.warn(
108
+ `[driftengine] this device would not allocate ${this.layers} environment probe layers at ` +
109
+ `${edge}x${edge}. Reflective surfaces keep the sky-and-ground gradient and diffuse ` +
110
+ 'ambient stays whatever the scene set. Nothing else is affected.',
111
+ );
112
+ }
113
+
114
+ const framebuffer = gl.createFramebuffer();
115
+ if (framebuffer === null) throw new Error('EnvProbeArray: createFramebuffer failed');
116
+ this.framebuffer = framebuffer;
117
+ }
118
+
119
+ /**
120
+ * Convolve one probe's captured cube into one layer, every level of it.
121
+ *
122
+ * **The caller draws, and this owns the target**, which is the split `ReflectionProbe.prefilter`
123
+ * already makes with the pass that convolves: a probe has no business knowing what a shader is,
124
+ * and a pass has no business knowing which layer it is filling.
125
+ *
126
+ * **One draw a level rather than six.** A cube's convolution runs the triangle once per face per
127
+ * level; an octahedral map has no faces, so a level is one draw and a probe's convolution is six
128
+ * times fewer of them than the cube it replaces.
129
+ *
130
+ * **The source is a different texture object from the target and that is not tidiness.** WebGL2's
131
+ * rendering-feedback-loop check is per texture object rather than per image, so a draw that
132
+ * samples the array while any layer of it is attached is `INVALID_OPERATION` — on a layer it does
133
+ * not even write. `pointShadowArray.ts` records paying for this on a probe before that file
134
+ * existed. Here the source is the scratch cube and the target is the array, so it cannot arise.
135
+ */
136
+ convolve(
137
+ gl: WebGL2RenderingContext,
138
+ layer: number,
139
+ run: (level: number, roughness: number, kind: ProbeLevelKind) => void,
140
+ ): void {
141
+ if (this.unusable) return;
142
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
143
+ for (let level = 0; level <= this.irradianceLevel; level++) {
144
+ /* A level is half the width of the one below it, and the viewport has to say so or the
145
+ triangle covers a quarter of the target and leaves the rest at whatever was there. */
146
+ const size = Math.max(1, this.edge >> level);
147
+ gl.viewport(0, 0, size, size);
148
+ gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, this.texture, level, layer);
149
+ if (level === 0 && gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
150
+ this.unusable = true;
151
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
152
+ console.warn(
153
+ '[driftengine] this driver will not render into an environment probe layer, so ' +
154
+ 'reflective surfaces keep the sky-and-ground approximation. Nothing else is affected.',
155
+ );
156
+ return;
157
+ }
158
+ const irradiance = level === this.irradianceLevel;
159
+ run(
160
+ level,
161
+ irradiance ? 1 : roughnessForLevel(level, this.ggxMaxLevel),
162
+ irradiance ? 'irradiance' : 'radiance',
163
+ );
164
+ }
165
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
166
+ if (this.baked[layer] !== 1) {
167
+ this.baked[layer] = 1;
168
+ this.bakedCount++;
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Whether the shader may sample this, which needs **every** layer filled.
174
+ *
175
+ * A grid baked a probe a frame passes through a state where some layers hold whatever the driver
176
+ * left in them, and a fragment blending eight corners reads four of those. The gate is therefore
177
+ * the whole grid rather than any part of it — the same rule one probe already had, where
178
+ * `uEnvironmentEnabled` stayed at zero until a bake finished, for the same reason: a car
179
+ * mirroring uninitialised memory is worse than a car mirroring a gradient.
180
+ */
181
+ get ready(): boolean {
182
+ return !this.unusable && this.bakedCount === this.layers;
183
+ }
184
+
185
+ /** How many layers have been convolved, for a caller pacing a bake across frames. */
186
+ get filled(): number {
187
+ return this.bakedCount;
188
+ }
189
+
190
+ /** Whether this allocated at all. False means the scene renders without a grid. */
191
+ get usable(): boolean {
192
+ return !this.unusable;
193
+ }
194
+
195
+ dispose(gl: WebGL2RenderingContext): void {
196
+ gl.deleteFramebuffer(this.framebuffer);
197
+ gl.deleteTexture(this.texture);
198
+ this.baked.fill(0);
199
+ this.bakedCount = 0;
200
+ }
201
+ }
@@ -0,0 +1,160 @@
1
+ /** An equirectangular image resampled onto the six faces of a cube. */
2
+
3
+ /**
4
+ * The direction a texel stands for, per face.
5
+ *
6
+ * `forward` is the face centre, `basisX` steps across a row and `basisY` down a column, matching
7
+ * `webgpu/probePass.ts`'s `PROBE_FACE_BASIS` exactly — the same table, and it is the same table
8
+ * because getting one sign wrong mirrors a single face, which projects to a plausible-looking
9
+ * wrong answer rather than to an error.
10
+ *
11
+ * **It lived in `irradianceSh.ts` until the spherical-harmonic path was retired**, and it moved
12
+ * here rather than being deleted with it: the capture is still a cube, so a loaded environment
13
+ * still has to know which direction each of its texels stands for. The prefilter's own copy went
14
+ * with the six-face loop, since an octahedral target has no faces at all.
15
+ */
16
+ export const FACE_BASIS: readonly {
17
+ readonly forward: readonly [number, number, number];
18
+ readonly basisX: readonly [number, number, number];
19
+ readonly basisY: readonly [number, number, number];
20
+ }[] = [
21
+ { forward: [1, 0, 0], basisX: [0, 0, -1], basisY: [0, -1, 0] },
22
+ { forward: [-1, 0, 0], basisX: [0, 0, 1], basisY: [0, -1, 0] },
23
+ { forward: [0, 1, 0], basisX: [1, 0, 0], basisY: [0, 0, 1] },
24
+ { forward: [0, -1, 0], basisX: [1, 0, 0], basisY: [0, 0, -1] },
25
+ { forward: [0, 0, 1], basisX: [1, 0, 0], basisY: [0, -1, 0] },
26
+ { forward: [0, 0, -1], basisX: [-1, 0, 0], basisY: [0, -1, 0] },
27
+ ];
28
+
29
+ /** What a decoded `.hdr` looks like, restated structurally so this imports no package. */
30
+ export interface EquirectSource {
31
+ readonly width: number;
32
+ readonly height: number;
33
+ /** `width * height * 3` linear values, row-major from the top. */
34
+ readonly data: Float32Array;
35
+ }
36
+
37
+ /**
38
+ * Resample an equirectangular environment onto six cube faces.
39
+ *
40
+ * **Backend-neutral, and it produces exactly what the projection already takes.** The output is the
41
+ * shape a bake produces — six `size * size * 4` arrays of linear RGBA in
42
+ * cubemap order — so a loaded environment joins the captured path at the same place a bake does,
43
+ * and everything downstream of the cube is one implementation rather than two.
44
+ *
45
+ * **The face basis is imported rather than restated.** This is the fourth place that table would
46
+ * have appeared, and its failure mode is the one the 2026-08-17 rule is about: a mirrored face
47
+ * projects perfectly well onto a wrong answer, and the last time two copies disagreed it took
48
+ * projecting both backends' cubes onto one shared basis to find a sign in the linear Z band.
49
+ *
50
+ * ## The convention, stated because there is no universal one
51
+ *
52
+ * - **Row 0 is the zenith.** `v = acos(y) / pi`, so the top of the image is `+Y`. Inverting this
53
+ * puts the sky underfoot, and every surface is then lit from below with nothing in the picture
54
+ * to say why.
55
+ * - **The centre column is `-Z`.** `u = 0.5 + atan2(x, -z) / 2pi`, which is the engine's own camera
56
+ * convention — yaw 0 looks toward `-Z` and positive yaw turns toward `+X` — so `+X` lands three
57
+ * quarters of the way across. Choosing the mirror of this passes every brightness check and
58
+ * every sky-is-up check, and shows only as a reflection that turns the wrong way.
59
+ *
60
+ * **What it costs** is bilinear sampling per texel of the destination, once, at load. **What would
61
+ * make it wrong** is a source small enough that the cube is upsampling it — at that point the faces
62
+ * carry interpolation rather than image, and the honest answer is a smaller cube.
63
+ */
64
+ export function equirectToCubeFaces(source: EquirectSource, size: number): Float32Array[] {
65
+ if (size <= 0) throw new Error(`equirectToCubeFaces: a ${size}-texel face is not buildable`);
66
+ if (source.width <= 0 || source.height <= 0) {
67
+ throw new Error(
68
+ `equirectToCubeFaces: a ${source.width} by ${source.height} source has nothing to sample`,
69
+ );
70
+ }
71
+
72
+ const faces: Float32Array[] = [];
73
+ for (let face = 0; face < FACE_BASIS.length; face++) {
74
+ const basis = FACE_BASIS[face];
75
+ const pixels = new Float32Array(size * size * 4);
76
+ if (basis === undefined) {
77
+ faces.push(pixels);
78
+ continue;
79
+ }
80
+ for (let y = 0; y < size; y++) {
81
+ /* Texel centres in [-1, 1], the same mapping the projection uses, so the two agree exactly. */
82
+ const v = ((y + 0.5) / size) * 2 - 1;
83
+ for (let x = 0; x < size; x++) {
84
+ const u = ((x + 0.5) / size) * 2 - 1;
85
+ const dx = basis.forward[0] + basis.basisX[0] * u + basis.basisY[0] * v;
86
+ const dy = basis.forward[1] + basis.basisX[1] * u + basis.basisY[1] * v;
87
+ const dz = basis.forward[2] + basis.basisX[2] * u + basis.basisY[2] * v;
88
+ const inverse = 1 / Math.sqrt(dx * dx + dy * dy + dz * dz);
89
+ sampleEquirect(
90
+ source,
91
+ dx * inverse,
92
+ dy * inverse,
93
+ dz * inverse,
94
+ pixels,
95
+ (y * size + x) * 4,
96
+ );
97
+ }
98
+ }
99
+ faces.push(pixels);
100
+ }
101
+ return faces;
102
+ }
103
+
104
+ /**
105
+ * One direction, bilinearly sampled out of the source, written as RGBA at `out`.
106
+ *
107
+ * **Wrapped in longitude and clamped in latitude**, which is what the sphere actually does: the
108
+ * seam at `u = 1` meets `u = 0` and is a real join, while the pole is a point and has no neighbour
109
+ * above it. Clamping both would put a visible seam down the back of every environment; wrapping
110
+ * both would sample the far side of the sky at the zenith.
111
+ */
112
+ function sampleEquirect(
113
+ source: EquirectSource,
114
+ dx: number,
115
+ dy: number,
116
+ dz: number,
117
+ out: Float32Array,
118
+ at: number,
119
+ ): void {
120
+ const { width, height, data } = source;
121
+
122
+ const u = 0.5 + Math.atan2(dx, -dz) / (2 * Math.PI);
123
+ const v = Math.acos(Math.min(1, Math.max(-1, dy))) / Math.PI;
124
+
125
+ /* Texel centres again, so a sample at the exact centre of a texel reads that texel and no other. */
126
+ const fx = u * width - 0.5;
127
+ const fy = v * height - 0.5;
128
+ const x0 = Math.floor(fx);
129
+ const y0 = Math.floor(fy);
130
+ const tx = fx - x0;
131
+ const ty = fy - y0;
132
+
133
+ const xa = wrap(x0, width);
134
+ const xb = wrap(x0 + 1, width);
135
+ const ya = clamp(y0, height);
136
+ const yb = clamp(y0 + 1, height);
137
+
138
+ for (let channel = 0; channel < 3; channel++) {
139
+ const aa = data[(ya * width + xa) * 3 + channel] ?? 0;
140
+ const ba = data[(ya * width + xb) * 3 + channel] ?? 0;
141
+ const ab = data[(yb * width + xa) * 3 + channel] ?? 0;
142
+ const bb = data[(yb * width + xb) * 3 + channel] ?? 0;
143
+ const top = aa + (ba - aa) * tx;
144
+ const bottom = ab + (bb - ab) * tx;
145
+ out[at + channel] = top + (bottom - top) * ty;
146
+ }
147
+ /* One, because a cube sampler reads four channels whatever an environment meant by the fourth. */
148
+ out[at + 3] = 1;
149
+ }
150
+
151
+ /** Longitude wraps: the image's left edge is its right edge. */
152
+ function wrap(value: number, extent: number): number {
153
+ const wrapped = value % extent;
154
+ return wrapped < 0 ? wrapped + extent : wrapped;
155
+ }
156
+
157
+ /** Latitude clamps: there is nothing above the zenith to blend with. */
158
+ function clamp(value: number, extent: number): number {
159
+ return value < 0 ? 0 : value >= extent ? extent - 1 : value;
160
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A flock's static geometry, held once so both backends draw the same bird.
3
+ *
4
+ * Two triangles a bird, a body quad split into two wings, with a per-vertex weight that is 1 at
5
+ * a wingtip and 0 at the body so only the tips beat. Every bird's path is computed in the vertex
6
+ * shader from its index and the clock, so this is uploaded once and the frame loop does nothing.
7
+ *
8
+ * Shared rather than restated for the reason `waterGrid.ts` was extracted: a second corner table
9
+ * is a second bird, and a mesh that differs by a wing between backends is not something the
10
+ * parity gate can attribute.
11
+ */
12
+
13
+ /** Corner positions, in wingspans: tip, body front, body back. */
14
+ export const FLOCK_CORNERS: readonly (readonly [number, number])[] = [
15
+ [-1, 0],
16
+ [0, -0.35],
17
+ [0, 0.35],
18
+ [1, 0],
19
+ [0, 0.35],
20
+ [0, -0.35],
21
+ ];
22
+
23
+ /** 1 at a wingtip, 0 at the body, so only the tips beat. */
24
+ export const FLOCK_WING: readonly number[] = [1, 0, 0, 1, 0, 0];
25
+
26
+ /** The three static attribute streams a flock is drawn from. */
27
+ export interface FlockGeometry {
28
+ readonly corners: Float32Array;
29
+ readonly wings: Float32Array;
30
+ readonly indices: Float32Array;
31
+ readonly vertexCount: number;
32
+ }
33
+
34
+ export function buildFlockGeometry(count: number): FlockGeometry {
35
+ if (count <= 0) throw new Error('A flock needs at least one bird.');
36
+ const perBird = FLOCK_CORNERS.length;
37
+ const corners = new Float32Array(count * perBird * 2);
38
+ const wings = new Float32Array(count * perBird);
39
+ const indices = new Float32Array(count * perBird);
40
+ let c = 0;
41
+ let w = 0;
42
+ for (let bird = 0; bird < count; bird++) {
43
+ for (let v = 0; v < perBird; v++) {
44
+ const corner = FLOCK_CORNERS[v] as readonly [number, number];
45
+ corners[c++] = corner[0];
46
+ corners[c++] = corner[1];
47
+ wings[w] = FLOCK_WING[v] ?? 0;
48
+ indices[w] = bird;
49
+ w++;
50
+ }
51
+ }
52
+ return { corners, wings, indices, vertexCount: count * perBird };
53
+ }
@@ -0,0 +1,111 @@
1
+ import type { FrameView } from './frameView.ts';
2
+ import type { Vec3 } from '../math/color.ts';
3
+ import { compileProgram, uniformLocations } from './shader.ts';
4
+ import { FLOCK_FRAG, FLOCK_VERT } from './shaders/flock.ts';
5
+ import { buildFlockGeometry } from './flockGeometry.ts';
6
+
7
+ /**
8
+ * Ambient sky life. Entirely GPU-side: the geometry is uploaded once and every
9
+ * bird's path is computed in the vertex shader from its index and the clock.
10
+ *
11
+ * Deliberately not a simulation. Flocking behaviour would be CPU work every
12
+ * frame, forever, for something nobody looks at directly — and the thing it
13
+ * actually buys, a world that carries on without the player, comes from motion
14
+ * and silhouette rather than from correct boids.
15
+ */
16
+ export interface FlockParams {
17
+ center: Vec3;
18
+ radius: number;
19
+ height: number;
20
+ count: number;
21
+ /** Metres per second along the orbit. */
22
+ speed: number;
23
+ /**
24
+ * Half the wingspan, in metres: a bird measures `2 * scale` from tip to tip.
25
+ *
26
+ * It said "wingspan, roughly", and it is out by a factor of two, which is not roughly.
27
+ * The corner table below puts the tips at plus and minus one before this multiplies
28
+ * them, so a caller asking for a 1.5 m bird is handed a 3 m one.
29
+ */
30
+ scale: number;
31
+ }
32
+
33
+ export class FlockRenderer {
34
+ private readonly program: WebGLProgram;
35
+ private readonly uniforms: Record<string, WebGLUniformLocation>;
36
+ private readonly vao: WebGLVertexArrayObject;
37
+ private readonly buffers: WebGLBuffer[] = [];
38
+ private readonly vertexCount: number;
39
+
40
+ constructor(gl: WebGL2RenderingContext, count: number) {
41
+ this.program = compileProgram(gl, FLOCK_VERT, FLOCK_FRAG, 'flock');
42
+ this.uniforms = uniformLocations(gl, this.program, 'flockRenderer');
43
+
44
+ /* Built in `flockGeometry.ts`, which is also where the count is validated. */
45
+ const geometry = buildFlockGeometry(count);
46
+ const { corners, wings, indices } = geometry;
47
+ this.vertexCount = geometry.vertexCount;
48
+
49
+ const vao = gl.createVertexArray();
50
+ if (vao === null) throw new Error('FlockRenderer: createVertexArray failed');
51
+ this.vao = vao;
52
+ gl.bindVertexArray(vao);
53
+
54
+ const attach = (data: Float32Array, location: number, size: number): void => {
55
+ const buffer = gl.createBuffer();
56
+ if (buffer === null) throw new Error('FlockRenderer: createBuffer failed');
57
+ this.buffers.push(buffer);
58
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
59
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
60
+ gl.enableVertexAttribArray(location);
61
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
62
+ };
63
+ attach(corners, 0, 2);
64
+ attach(wings, 1, 1);
65
+ attach(indices, 2, 1);
66
+ gl.bindVertexArray(null);
67
+ }
68
+
69
+ draw(
70
+ gl: WebGL2RenderingContext,
71
+ camera: FrameView,
72
+ timeSeconds: number,
73
+ params: FlockParams,
74
+ tint: Vec3,
75
+ windX = 0,
76
+ windZ = 0,
77
+ ): void {
78
+ const u = this.uniforms;
79
+ gl.useProgram(this.program);
80
+ gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
81
+ /*
82
+ * No `uCameraPos` here, and the shader no longer declares one. It fed the banking that
83
+ * turned a wing plane toward the viewer, and that was reverted with the rest of the flock
84
+ * work when the shape being reported turned out to be the lighthouse beam rather than a
85
+ * bird. What was left behind was a declaration nothing read and an upload every frame to a
86
+ * location that had stopped existing. See AGENTS.md, 2026-08-10.
87
+ */
88
+ gl.uniform3fv(u['uCenter'] ?? null, params.center);
89
+ gl.uniform1f(u['uRadius'] ?? null, params.radius);
90
+ gl.uniform1f(u['uHeight'] ?? null, params.height);
91
+ gl.uniform1f(u['uSpeed'] ?? null, params.speed);
92
+ gl.uniform1f(u['uCount'] ?? null, params.count);
93
+ gl.uniform1f(u['uScale'] ?? null, params.scale);
94
+ gl.uniform1f(u['uTime'] ?? null, timeSeconds);
95
+ gl.uniform3fv(u['uTint'] ?? null, tint);
96
+ gl.uniform2f(u['uWind'] ?? null, windX, windZ);
97
+
98
+ // Birds are flat and seen from both sides as they bank.
99
+ gl.disable(gl.CULL_FACE);
100
+ gl.bindVertexArray(this.vao);
101
+ gl.drawArrays(gl.TRIANGLES, 0, this.vertexCount);
102
+ gl.bindVertexArray(null);
103
+ gl.enable(gl.CULL_FACE);
104
+ }
105
+
106
+ dispose(gl: WebGL2RenderingContext): void {
107
+ for (const buffer of this.buffers) gl.deleteBuffer(buffer);
108
+ gl.deleteVertexArray(this.vao);
109
+ gl.deleteProgram(this.program);
110
+ }
111
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Where a frame's draws are recorded, without allocating.
3
+ *
4
+ * A recorder is exactly the shape that wants an object per draw, and `AGENTS.md` forbids
5
+ * allocating while a frame is running. So a node is six integers in one `Int32Array` and a
6
+ * draw writes into it and returns: nothing constructed, nothing captured by a closure.
7
+ * `InstanceData` and the particle pools already work this way, so the pattern is established
8
+ * here rather than imported.
9
+ *
10
+ * Growth happens, and it happens where allocation is legal. A frame that records past
11
+ * capacity must not silently drop a draw — that is the failure this is designed against — so
12
+ * it grows, records `highWater`, and the next frame starts large enough for what the last one
13
+ * needed.
14
+ */
15
+ export const NODE_STRIDE = 6;
16
+
17
+ const VERB = 0;
18
+ const READS = 1;
19
+ const WRITES = 2;
20
+ const STATE = 3;
21
+ const MATRIX = 4;
22
+ /*
23
+ * Slot 5 is reserved for the handle slice the executor will need. It is written as zero
24
+ * until then so the stride does not change when it is used, and every offset above stays
25
+ * where it is.
26
+ */
27
+
28
+ export interface Arena {
29
+ nodes: Int32Array;
30
+ count: number;
31
+ /** The most nodes any frame has recorded, so growth converges instead of repeating. */
32
+ highWater: number;
33
+ }
34
+
35
+ export function createArena(capacity: number): Arena {
36
+ return { nodes: new Int32Array(capacity * NODE_STRIDE), count: 0, highWater: 0 };
37
+ }
38
+
39
+ /** Empty the arena for a new frame. Keeps the storage; that is the whole point. */
40
+ export function resetArena(arena: Arena): void {
41
+ arena.count = 0;
42
+ }
43
+
44
+ export function nodeCount(arena: Arena): number {
45
+ return arena.count;
46
+ }
47
+
48
+ /** Record one node and return its index. */
49
+ export function recordNode(
50
+ arena: Arena,
51
+ verb: number,
52
+ reads: number,
53
+ writes: number,
54
+ state: number,
55
+ matrix: number,
56
+ ): number {
57
+ const at = arena.count;
58
+ const need = (at + 1) * NODE_STRIDE;
59
+ if (need > arena.nodes.length) {
60
+ const grown = new Int32Array(Math.max(need, arena.nodes.length * 2));
61
+ grown.set(arena.nodes);
62
+ arena.nodes = grown;
63
+ }
64
+ const base = at * NODE_STRIDE;
65
+ arena.nodes[base + VERB] = verb;
66
+ arena.nodes[base + READS] = reads;
67
+ arena.nodes[base + WRITES] = writes;
68
+ arena.nodes[base + STATE] = state;
69
+ arena.nodes[base + MATRIX] = matrix;
70
+ arena.count = at + 1;
71
+ if (arena.count > arena.highWater) arena.highWater = arena.count;
72
+ return at;
73
+ }
74
+
75
+ export function nodeVerb(arena: Arena, at: number): number {
76
+ return arena.nodes[at * NODE_STRIDE + VERB] ?? 0;
77
+ }
78
+
79
+ export function nodeReads(arena: Arena, at: number): number {
80
+ return arena.nodes[at * NODE_STRIDE + READS] ?? 0;
81
+ }
82
+
83
+ export function nodeWrites(arena: Arena, at: number): number {
84
+ return arena.nodes[at * NODE_STRIDE + WRITES] ?? 0;
85
+ }
86
+
87
+ export function nodeState(arena: Arena, at: number): number {
88
+ return arena.nodes[at * NODE_STRIDE + STATE] ?? 0;
89
+ }
90
+
91
+ export function nodeMatrix(arena: Arena, at: number): number {
92
+ return arena.nodes[at * NODE_STRIDE + MATRIX] ?? 0;
93
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The frame graph's pure half: what a frame touches, how a draw is recorded, and how records
3
+ * become passes.
4
+ *
5
+ * Nothing here imports WebGL or WebGPU. The scheduler is arithmetic, which is what lets the
6
+ * only novel logic in the design be proven by assertion before any renderer is rewritten
7
+ * around it.
8
+ *
9
+ * Deliberately not on the package barrel. Nothing outside `render/` may reach these yet;
10
+ * Phase B is what decides their public shape.
11
+ */
12
+ export type { FrameResource } from './resources.ts';
13
+ export { FRAME_RESOURCES, RESOURCE_COUNT, maskOf, namesIn, resourceBit } from './resources.ts';
14
+ export type { Arena } from './arena.ts';
15
+ export {
16
+ NODE_STRIDE,
17
+ createArena,
18
+ nodeCount,
19
+ nodeMatrix,
20
+ nodeReads,
21
+ nodeState,
22
+ nodeVerb,
23
+ nodeWrites,
24
+ recordNode,
25
+ resetArena,
26
+ } from './arena.ts';
27
+ export type { ScheduledPass } from './schedule.ts';
28
+ export { schedule } from './schedule.ts';
29
+ export { keptNodes, scratchFor } from './replay.ts';