@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,52 @@
1
+ /**
2
+ * A ceiling on how many pixels one frame may be, independent of how big the window is.
3
+ *
4
+ * `maxDevicePixelRatio` caps *density* — pixels per CSS pixel — which is the right lever
5
+ * for "is this panel high-DPI" and the wrong one for "how much frame is this". Density
6
+ * held constant, the cost of a frame is still whatever area the player last dragged their
7
+ * window to, and the frame is roughly 90% fragment-bound, so window size is an
8
+ * uncontrolled multiplier on the whole renderer.
9
+ *
10
+ * That is fine right up until it isn't, because vsync quantises the consequence. A frame
11
+ * that fits a 120 Hz slot with 5% to spare and then grows 10% does not run 10% slower; it
12
+ * misses the slot and is shown at 60. Going fullscreen is exactly such a growth — the
13
+ * browser's toolbar was the margin — so the symptom arrives as "fullscreen halves the
14
+ * frame rate", which sounds like a bug in fullscreen and is arithmetic about area.
15
+ *
16
+ * A budget makes that cost bounded and, more usefully, *legible*: a player can move it
17
+ * and watch the frame rate move, which is the same argument that put the resolution lever
18
+ * on the settings screen. Zero means uncapped, for a machine that would rather have the
19
+ * pixels.
20
+ */
21
+ /** Mutable so the caller can own one and keep `resize` allocation-free. */
22
+ export interface BufferSize {
23
+ width: number;
24
+ height: number;
25
+ }
26
+ /**
27
+ * Fit `width` x `height` under `maxPixels`, preserving aspect, into `out`.
28
+ *
29
+ * Writes rather than returns, because `Renderer.resize` runs every frame and per-frame
30
+ * allocation is forbidden (AGENTS.md). Non-positive and non-finite budgets mean uncapped:
31
+ * this runs in the frame loop, where a corrupt stored setting has to degrade to the old
32
+ * behaviour rather than throw.
33
+ *
34
+ * Scaled by the square root of the ratio, so both axes shrink together and
35
+ * `Renderer.aspect` still describes the shot the camera composed for. Rounded *down*, so
36
+ * the budget is a promise rather than an approximation — the whole point is that a number
37
+ * a player chose is the number they get.
38
+ */
39
+ export declare function fitToPixelBudget(width: number, height: number, maxPixels: number, out: BufferSize): void;
40
+ /**
41
+ * The size the next frame is drawn at, into `out`.
42
+ *
43
+ * **A locked buffer is handed back exactly, and no cap of any kind touches it.** That is
44
+ * the one rule in here that is not about performance: a lock is a caller naming a size for
45
+ * a reason no quality setting can see — a clip is 1080x1920 whatever anybody's frame rate
46
+ * is, and `Renderer.aspect` follows the lock so the replay's shots are composed for the
47
+ * *file* rather than for the window it is being written from. A budget applied over the
48
+ * top would silently write a file that is not the size it claims and re-frame every shot
49
+ * in it. Pass `dpr` already clamped; unlocked, the CSS box is scaled by it and then fitted
50
+ * under `maxPixels`.
51
+ */
52
+ export declare function drawingBufferSize(cssWidth: number, cssHeight: number, dpr: number, lockedWidth: number, lockedHeight: number, maxPixels: number, out: BufferSize): void;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * A ceiling on how many pixels one frame may be, independent of how big the window is.
3
+ *
4
+ * `maxDevicePixelRatio` caps *density* — pixels per CSS pixel — which is the right lever
5
+ * for "is this panel high-DPI" and the wrong one for "how much frame is this". Density
6
+ * held constant, the cost of a frame is still whatever area the player last dragged their
7
+ * window to, and the frame is roughly 90% fragment-bound, so window size is an
8
+ * uncontrolled multiplier on the whole renderer.
9
+ *
10
+ * That is fine right up until it isn't, because vsync quantises the consequence. A frame
11
+ * that fits a 120 Hz slot with 5% to spare and then grows 10% does not run 10% slower; it
12
+ * misses the slot and is shown at 60. Going fullscreen is exactly such a growth — the
13
+ * browser's toolbar was the margin — so the symptom arrives as "fullscreen halves the
14
+ * frame rate", which sounds like a bug in fullscreen and is arithmetic about area.
15
+ *
16
+ * A budget makes that cost bounded and, more usefully, *legible*: a player can move it
17
+ * and watch the frame rate move, which is the same argument that put the resolution lever
18
+ * on the settings screen. Zero means uncapped, for a machine that would rather have the
19
+ * pixels.
20
+ */
21
+ /** Smallest drawing buffer worth asking a driver for; zero is a GL error, not a picture. */
22
+ const MIN_SIDE = 2;
23
+ /**
24
+ * Fit `width` x `height` under `maxPixels`, preserving aspect, into `out`.
25
+ *
26
+ * Writes rather than returns, because `Renderer.resize` runs every frame and per-frame
27
+ * allocation is forbidden (AGENTS.md). Non-positive and non-finite budgets mean uncapped:
28
+ * this runs in the frame loop, where a corrupt stored setting has to degrade to the old
29
+ * behaviour rather than throw.
30
+ *
31
+ * Scaled by the square root of the ratio, so both axes shrink together and
32
+ * `Renderer.aspect` still describes the shot the camera composed for. Rounded *down*, so
33
+ * the budget is a promise rather than an approximation — the whole point is that a number
34
+ * a player chose is the number they get.
35
+ */
36
+ export function fitToPixelBudget(width, height, maxPixels, out) {
37
+ out.width = width;
38
+ out.height = height;
39
+ if (!Number.isFinite(maxPixels) || maxPixels <= 0)
40
+ return;
41
+ const pixels = width * height;
42
+ if (pixels <= maxPixels)
43
+ return;
44
+ const scale = Math.sqrt(maxPixels / pixels);
45
+ out.width = Math.max(MIN_SIDE, Math.floor(width * scale));
46
+ out.height = Math.max(MIN_SIDE, Math.floor(height * scale));
47
+ }
48
+ /**
49
+ * The size the next frame is drawn at, into `out`.
50
+ *
51
+ * **A locked buffer is handed back exactly, and no cap of any kind touches it.** That is
52
+ * the one rule in here that is not about performance: a lock is a caller naming a size for
53
+ * a reason no quality setting can see — a clip is 1080x1920 whatever anybody's frame rate
54
+ * is, and `Renderer.aspect` follows the lock so the replay's shots are composed for the
55
+ * *file* rather than for the window it is being written from. A budget applied over the
56
+ * top would silently write a file that is not the size it claims and re-frame every shot
57
+ * in it. Pass `dpr` already clamped; unlocked, the CSS box is scaled by it and then fitted
58
+ * under `maxPixels`.
59
+ */
60
+ export function drawingBufferSize(cssWidth, cssHeight, dpr, lockedWidth, lockedHeight, maxPixels, out) {
61
+ if (lockedWidth > 0 && lockedHeight > 0) {
62
+ out.width = lockedWidth;
63
+ out.height = lockedHeight;
64
+ return;
65
+ }
66
+ fitToPixelBudget(Math.round(cssWidth * dpr), Math.round(cssHeight * dpr), maxPixels, out);
67
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 1x1 placeholders for sampler slots a pass declares but does not use.
3
+ *
4
+ * A shader's sampler uniforms exist whether or not the feature behind them is switched
5
+ * on: the flat pass declares three directional shadow maps and twelve cubemaps, and a
6
+ * quality profile with shadows off still compiles every one of them. The obvious way to
7
+ * say "there is nothing here" is to bind `null` to the unit, and it is wrong.
8
+ *
9
+ * A sampler bound to no texture is *incomplete*. The GL spec says sampling one yields
10
+ * zero, which sounds like a safe default and is only safe if the sample never executes.
11
+ * The guards in this engine are runtime values — `uShadowStrength <= 0.0`, an index
12
+ * compared against -1 — so a driver is free to fetch the descriptor before it evaluates
13
+ * the branch that would have skipped it. Descriptor fetches are scalar loads, and a
14
+ * descriptor for a texture that does not exist is not guaranteed to point anywhere.
15
+ *
16
+ * On a Radeon RX 9070 XT (RDNA4, Mesa 25.2.8) that read lands outside the process's GPU
17
+ * address space and faults:
18
+ *
19
+ * amdgpu: [gfxhub] page fault ... Faulty UTCL2 client ID: SQC (data)
20
+ * amdgpu: ring gfx_0.0.0 timeout -> Ring gfx_0.0.0 reset -> device wedged
21
+ *
22
+ * The context dies, the compositor stalls for a second or two while the driver resets the
23
+ * card, and nothing in the API reports an error — the page simply loses its context a few
24
+ * seconds in. Binding a real texture costs one 1x1 upload per renderer and removes the
25
+ * question: every declared sampler has something complete behind it, whether the pass
26
+ * reads it or not. three.js keeps an empty texture per target for the same reason.
27
+ *
28
+ * Not a workaround for one card. An incomplete sampler is undefined territory that
29
+ * happens to be survivable on most drivers, and this makes the engine stop relying on
30
+ * that.
31
+ */
32
+ /**
33
+ * A complete 1x1 texture for any unused `sampler2D` slot.
34
+ *
35
+ * `NEAREST` and `CLAMP_TO_EDGE` because a single texel has no mip chain: leaving the
36
+ * default `LINEAR_MIPMAP_LINEAR` minification filter on a texture with only level 0 makes
37
+ * it incomplete again, which is the exact state this exists to avoid.
38
+ */
39
+ export declare function createEmptyTexture2D(gl: WebGL2RenderingContext): WebGLTexture;
40
+ /**
41
+ * The same for an unused `sampler2DArray` slot: one layer, one texel.
42
+ *
43
+ * The point-shadow array exists only once a world has said how many lights it has, and a scene is
44
+ * free to draw before it does. One layer rather than the full pool's worth, because nothing reads
45
+ * it: `uPointShadowLayer` is −1 for every light while this is bound, and the layer index never
46
+ * reaches a fetch. It is here to be *complete*, which is the whole subject of this file.
47
+ *
48
+ * White rather than black, matching the one-texel cube the WebGPU side keeps and for its reason:
49
+ * a full-depth texel reads as an occluder at the far plane, so the worst a lookup that should not
50
+ * have happened can do is find nothing in the way. Zeroes would mean an occluder pressed against
51
+ * every lamp, and every surface in the scene in shadow.
52
+ */
53
+ export declare function createEmptyTexture2DArray(gl: WebGL2RenderingContext): WebGLTexture;
54
+ /**
55
+ * The same for an unused `samplerCube` slot.
56
+ *
57
+ * All six faces are supplied: a cubemap missing any one of them is incomplete however
58
+ * complete the other five are.
59
+ */
60
+ export declare function createEmptyTextureCube(gl: WebGL2RenderingContext): WebGLTexture;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 1x1 placeholders for sampler slots a pass declares but does not use.
3
+ *
4
+ * A shader's sampler uniforms exist whether or not the feature behind them is switched
5
+ * on: the flat pass declares three directional shadow maps and twelve cubemaps, and a
6
+ * quality profile with shadows off still compiles every one of them. The obvious way to
7
+ * say "there is nothing here" is to bind `null` to the unit, and it is wrong.
8
+ *
9
+ * A sampler bound to no texture is *incomplete*. The GL spec says sampling one yields
10
+ * zero, which sounds like a safe default and is only safe if the sample never executes.
11
+ * The guards in this engine are runtime values — `uShadowStrength <= 0.0`, an index
12
+ * compared against -1 — so a driver is free to fetch the descriptor before it evaluates
13
+ * the branch that would have skipped it. Descriptor fetches are scalar loads, and a
14
+ * descriptor for a texture that does not exist is not guaranteed to point anywhere.
15
+ *
16
+ * On a Radeon RX 9070 XT (RDNA4, Mesa 25.2.8) that read lands outside the process's GPU
17
+ * address space and faults:
18
+ *
19
+ * amdgpu: [gfxhub] page fault ... Faulty UTCL2 client ID: SQC (data)
20
+ * amdgpu: ring gfx_0.0.0 timeout -> Ring gfx_0.0.0 reset -> device wedged
21
+ *
22
+ * The context dies, the compositor stalls for a second or two while the driver resets the
23
+ * card, and nothing in the API reports an error — the page simply loses its context a few
24
+ * seconds in. Binding a real texture costs one 1x1 upload per renderer and removes the
25
+ * question: every declared sampler has something complete behind it, whether the pass
26
+ * reads it or not. three.js keeps an empty texture per target for the same reason.
27
+ *
28
+ * Not a workaround for one card. An incomplete sampler is undefined territory that
29
+ * happens to be survivable on most drivers, and this makes the engine stop relying on
30
+ * that.
31
+ */
32
+ /** Opaque black, which is what a shadow lookup should read where nothing occludes. */
33
+ const ONE_BLACK_TEXEL = new Uint8Array([0, 0, 0, 255]);
34
+ /** Full depth, which is the far plane: an occluder as far away as the light reaches. */
35
+ const ONE_WHITE_TEXEL = new Uint8Array([255]);
36
+ function allocate(gl, label) {
37
+ const texture = gl.createTexture();
38
+ if (texture === null)
39
+ throw new Error(`${label}: createTexture failed`);
40
+ return texture;
41
+ }
42
+ /**
43
+ * A complete 1x1 texture for any unused `sampler2D` slot.
44
+ *
45
+ * `NEAREST` and `CLAMP_TO_EDGE` because a single texel has no mip chain: leaving the
46
+ * default `LINEAR_MIPMAP_LINEAR` minification filter on a texture with only level 0 makes
47
+ * it incomplete again, which is the exact state this exists to avoid.
48
+ */
49
+ export function createEmptyTexture2D(gl) {
50
+ const texture = allocate(gl, 'emptyTexture2D');
51
+ gl.bindTexture(gl.TEXTURE_2D, texture);
52
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, ONE_BLACK_TEXEL);
53
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
54
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
55
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
56
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
57
+ gl.bindTexture(gl.TEXTURE_2D, null);
58
+ return texture;
59
+ }
60
+ /**
61
+ * The same for an unused `sampler2DArray` slot: one layer, one texel.
62
+ *
63
+ * The point-shadow array exists only once a world has said how many lights it has, and a scene is
64
+ * free to draw before it does. One layer rather than the full pool's worth, because nothing reads
65
+ * it: `uPointShadowLayer` is −1 for every light while this is bound, and the layer index never
66
+ * reaches a fetch. It is here to be *complete*, which is the whole subject of this file.
67
+ *
68
+ * White rather than black, matching the one-texel cube the WebGPU side keeps and for its reason:
69
+ * a full-depth texel reads as an occluder at the far plane, so the worst a lookup that should not
70
+ * have happened can do is find nothing in the way. Zeroes would mean an occluder pressed against
71
+ * every lamp, and every surface in the scene in shadow.
72
+ */
73
+ export function createEmptyTexture2DArray(gl) {
74
+ const texture = allocate(gl, 'emptyTexture2DArray');
75
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, texture);
76
+ gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.R8, 1, 1, 1);
77
+ gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, 1, 1, 1, gl.RED, gl.UNSIGNED_BYTE, ONE_WHITE_TEXEL);
78
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
79
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
80
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
81
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
82
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
83
+ return texture;
84
+ }
85
+ /**
86
+ * The same for an unused `samplerCube` slot.
87
+ *
88
+ * All six faces are supplied: a cubemap missing any one of them is incomplete however
89
+ * complete the other five are.
90
+ */
91
+ export function createEmptyTextureCube(gl) {
92
+ const texture = allocate(gl, 'emptyTextureCube');
93
+ gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
94
+ for (let face = 0; face < 6; face++) {
95
+ gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, ONE_BLACK_TEXEL);
96
+ }
97
+ gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
98
+ gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
99
+ gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
100
+ gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
101
+ gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
102
+ return texture;
103
+ }
@@ -0,0 +1,85 @@
1
+ /** Every probe in a grid as one array texture, and the scratch a bake fills it through. */
2
+ /**
3
+ * What one level of one layer is for, since the chain carries two different integrals.
4
+ *
5
+ * Levels up to `ggxMaxLevel` are the reflection, convolved against the GGX lobe at the roughness
6
+ * `roughnessForLevel` gives them. The level above that is the diffuse ambient, convolved against
7
+ * the cosine. They are the same pass with a different weight, and telling them apart is a uniform.
8
+ */
9
+ export type ProbeLevelKind = 'radiance' | 'irradiance';
10
+ /**
11
+ * Every probe of a grid as one `TEXTURE_2D_ARRAY` of octahedral maps.
12
+ *
13
+ * **One binding for any number of probes, which is the whole design.** GLSL ES cannot index a
14
+ * sampler array with a non-constant expression, so a grid of cubes would need a `samplerCube` each
15
+ * and a branch chain over them — the shape twelve point-shadow cubemaps had before
16
+ * `pointShadowArray.ts`, and the reason that file exists. A layer index has no such limit.
17
+ *
18
+ * **It replaces the `samplerCube` rather than joining it.** Fifteen of WebGL2's guaranteed sixteen
19
+ * texture units are spent, and `REFRACT_SCENE_TEXTURE_UNIT`'s comment says what the next sampler
20
+ * has to do about that: fold into an existing binding. This binds where the probe cube used to,
21
+ * and the irradiance level folds the diffuse term in beside the reflection, so the grid costs no
22
+ * units at all and unit 15 stays free.
23
+ *
24
+ * **The chain stops at the irradiance level.** `texStorage3D` may allocate fewer levels than a
25
+ * full chain, so there is nothing above it — a 256 edge is six levels rather than nine, and the
26
+ * levels that would have held one, four and sixteen texels are not allocated at all.
27
+ */
28
+ export declare class EnvProbeArray {
29
+ /** The array the lit pass samples. Octahedral, one layer a probe, gutter included. */
30
+ readonly texture: WebGLTexture;
31
+ /** Texels a side, including the one-texel gutter `octInsetUv` insets past. */
32
+ readonly edge: number;
33
+ readonly layers: number;
34
+ /** The coarsest level the reflection reaches, which is `uEnvironmentMaxLod`. */
35
+ readonly ggxMaxLevel: number;
36
+ /** The level holding the cosine convolution, one above the reflection's coarsest. */
37
+ readonly irradianceLevel: number;
38
+ private readonly framebuffer;
39
+ /** One flag a layer, because a grid may be baked a probe at a time across frames. */
40
+ private readonly baked;
41
+ private bakedCount;
42
+ /**
43
+ * Set once if the allocation is refused, and never cleared.
44
+ *
45
+ * A grid is an improvement to an appearance rather than a requirement, exactly as one probe was:
46
+ * a device that cannot afford the layers keeps the sky-and-ground gradient and loses nothing
47
+ * else. Sixty-four layers at the default edge is 43.7 MB, which is affordable on the parts this
48
+ * engine targets and is not affordable everywhere.
49
+ */
50
+ private unusable;
51
+ constructor(gl: WebGL2RenderingContext, edge: number, layers: number, floatColor: boolean);
52
+ /**
53
+ * Convolve one probe's captured cube into one layer, every level of it.
54
+ *
55
+ * **The caller draws, and this owns the target**, which is the split `ReflectionProbe.prefilter`
56
+ * already makes with the pass that convolves: a probe has no business knowing what a shader is,
57
+ * and a pass has no business knowing which layer it is filling.
58
+ *
59
+ * **One draw a level rather than six.** A cube's convolution runs the triangle once per face per
60
+ * level; an octahedral map has no faces, so a level is one draw and a probe's convolution is six
61
+ * times fewer of them than the cube it replaces.
62
+ *
63
+ * **The source is a different texture object from the target and that is not tidiness.** WebGL2's
64
+ * rendering-feedback-loop check is per texture object rather than per image, so a draw that
65
+ * samples the array while any layer of it is attached is `INVALID_OPERATION` — on a layer it does
66
+ * not even write. `pointShadowArray.ts` records paying for this on a probe before that file
67
+ * existed. Here the source is the scratch cube and the target is the array, so it cannot arise.
68
+ */
69
+ convolve(gl: WebGL2RenderingContext, layer: number, run: (level: number, roughness: number, kind: ProbeLevelKind) => void): void;
70
+ /**
71
+ * Whether the shader may sample this, which needs **every** layer filled.
72
+ *
73
+ * A grid baked a probe a frame passes through a state where some layers hold whatever the driver
74
+ * left in them, and a fragment blending eight corners reads four of those. The gate is therefore
75
+ * the whole grid rather than any part of it — the same rule one probe already had, where
76
+ * `uEnvironmentEnabled` stayed at zero until a bake finished, for the same reason: a car
77
+ * mirroring uninitialised memory is worse than a car mirroring a gradient.
78
+ */
79
+ get ready(): boolean;
80
+ /** How many layers have been convolved, for a caller pacing a bake across frames. */
81
+ get filled(): number;
82
+ /** Whether this allocated at all. False means the scene renders without a grid. */
83
+ get usable(): boolean;
84
+ dispose(gl: WebGL2RenderingContext): void;
85
+ }
@@ -0,0 +1,164 @@
1
+ /** Every probe in a grid as one array texture, and the scratch a bake fills it through. */
2
+ import { ggxMaxLevelFor, irradianceLevelFor, roughnessForLevel } from './prefilterEnvMap.js';
3
+ /**
4
+ * Every probe of a grid as one `TEXTURE_2D_ARRAY` of octahedral maps.
5
+ *
6
+ * **One binding for any number of probes, which is the whole design.** GLSL ES cannot index a
7
+ * sampler array with a non-constant expression, so a grid of cubes would need a `samplerCube` each
8
+ * and a branch chain over them — the shape twelve point-shadow cubemaps had before
9
+ * `pointShadowArray.ts`, and the reason that file exists. A layer index has no such limit.
10
+ *
11
+ * **It replaces the `samplerCube` rather than joining it.** Fifteen of WebGL2's guaranteed sixteen
12
+ * texture units are spent, and `REFRACT_SCENE_TEXTURE_UNIT`'s comment says what the next sampler
13
+ * has to do about that: fold into an existing binding. This binds where the probe cube used to,
14
+ * and the irradiance level folds the diffuse term in beside the reflection, so the grid costs no
15
+ * units at all and unit 15 stays free.
16
+ *
17
+ * **The chain stops at the irradiance level.** `texStorage3D` may allocate fewer levels than a
18
+ * full chain, so there is nothing above it — a 256 edge is six levels rather than nine, and the
19
+ * levels that would have held one, four and sixteen texels are not allocated at all.
20
+ */
21
+ export class EnvProbeArray {
22
+ /** The array the lit pass samples. Octahedral, one layer a probe, gutter included. */
23
+ texture;
24
+ /** Texels a side, including the one-texel gutter `octInsetUv` insets past. */
25
+ edge;
26
+ layers;
27
+ /** The coarsest level the reflection reaches, which is `uEnvironmentMaxLod`. */
28
+ ggxMaxLevel;
29
+ /** The level holding the cosine convolution, one above the reflection's coarsest. */
30
+ irradianceLevel;
31
+ framebuffer;
32
+ /** One flag a layer, because a grid may be baked a probe at a time across frames. */
33
+ baked;
34
+ bakedCount = 0;
35
+ /**
36
+ * Set once if the allocation is refused, and never cleared.
37
+ *
38
+ * A grid is an improvement to an appearance rather than a requirement, exactly as one probe was:
39
+ * a device that cannot afford the layers keeps the sky-and-ground gradient and loses nothing
40
+ * else. Sixty-four layers at the default edge is 43.7 MB, which is affordable on the parts this
41
+ * engine targets and is not affordable everywhere.
42
+ */
43
+ unusable = false;
44
+ constructor(gl, edge, layers, floatColor) {
45
+ this.edge = edge;
46
+ this.layers = Math.max(1, Math.trunc(layers));
47
+ this.ggxMaxLevel = ggxMaxLevelFor(edge);
48
+ this.irradianceLevel = irradianceLevelFor(edge);
49
+ this.baked = new Uint8Array(this.layers);
50
+ const texture = gl.createTexture();
51
+ if (texture === null)
52
+ throw new Error('EnvProbeArray: createTexture failed');
53
+ this.texture = texture;
54
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, texture);
55
+ /*
56
+ * **Drained once before the allocation, because `getError` reports and clears.** Without this
57
+ * the check below answers for whatever happened earlier in the frame, and a grid would stand
58
+ * down over somebody else's mistake. One call rather than a loop: a context that answers an
59
+ * error forever is a context this would never leave.
60
+ */
61
+ gl.getError();
62
+ gl.texStorage3D(gl.TEXTURE_2D_ARRAY,
63
+ /* Up to and including the irradiance level, and nothing above it. */
64
+ this.irradianceLevel + 1, floatColor ? gl.RGBA16F : gl.RGBA8, edge, edge, this.layers);
65
+ /*
66
+ * **`LINEAR_MIPMAP_NEAREST`, and the choice is a statement rather than a saving.** A level's
67
+ * gutter is one texel wide, so its inset in normalised coordinates is `1 / edge` and differs
68
+ * between levels; hardware trilinear applies one coordinate to both levels it blends, so one
69
+ * of the two would be read at the wrong inset — by a thirty-second of the map at the top of
70
+ * the chain. The shader fetches two levels at their own insets and mixes them, so the only
71
+ * filtering asked of the hardware is bilinear inside one level.
72
+ */
73
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
74
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
75
+ /*
76
+ * Clamped, and the gutter is what makes that correct. An octahedral map's border is a fold
77
+ * rather than an edge, so `CLAMP_TO_EDGE` repeating the last real texel would be wrong by
78
+ * 4.6e-2 in direction; the gutter holds the folded texel and the inset keeps every sample
79
+ * inside it, which is measured in `octahedral.test.ts`.
80
+ */
81
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
82
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
83
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
84
+ if (gl.getError() !== gl.NO_ERROR) {
85
+ this.unusable = true;
86
+ console.warn(`[driftengine] this device would not allocate ${this.layers} environment probe layers at ` +
87
+ `${edge}x${edge}. Reflective surfaces keep the sky-and-ground gradient and diffuse ` +
88
+ 'ambient stays whatever the scene set. Nothing else is affected.');
89
+ }
90
+ const framebuffer = gl.createFramebuffer();
91
+ if (framebuffer === null)
92
+ throw new Error('EnvProbeArray: createFramebuffer failed');
93
+ this.framebuffer = framebuffer;
94
+ }
95
+ /**
96
+ * Convolve one probe's captured cube into one layer, every level of it.
97
+ *
98
+ * **The caller draws, and this owns the target**, which is the split `ReflectionProbe.prefilter`
99
+ * already makes with the pass that convolves: a probe has no business knowing what a shader is,
100
+ * and a pass has no business knowing which layer it is filling.
101
+ *
102
+ * **One draw a level rather than six.** A cube's convolution runs the triangle once per face per
103
+ * level; an octahedral map has no faces, so a level is one draw and a probe's convolution is six
104
+ * times fewer of them than the cube it replaces.
105
+ *
106
+ * **The source is a different texture object from the target and that is not tidiness.** WebGL2's
107
+ * rendering-feedback-loop check is per texture object rather than per image, so a draw that
108
+ * samples the array while any layer of it is attached is `INVALID_OPERATION` — on a layer it does
109
+ * not even write. `pointShadowArray.ts` records paying for this on a probe before that file
110
+ * existed. Here the source is the scratch cube and the target is the array, so it cannot arise.
111
+ */
112
+ convolve(gl, layer, run) {
113
+ if (this.unusable)
114
+ return;
115
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
116
+ for (let level = 0; level <= this.irradianceLevel; level++) {
117
+ /* A level is half the width of the one below it, and the viewport has to say so or the
118
+ triangle covers a quarter of the target and leaves the rest at whatever was there. */
119
+ const size = Math.max(1, this.edge >> level);
120
+ gl.viewport(0, 0, size, size);
121
+ gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, this.texture, level, layer);
122
+ if (level === 0 && gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
123
+ this.unusable = true;
124
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
125
+ console.warn('[driftengine] this driver will not render into an environment probe layer, so ' +
126
+ 'reflective surfaces keep the sky-and-ground approximation. Nothing else is affected.');
127
+ return;
128
+ }
129
+ const irradiance = level === this.irradianceLevel;
130
+ run(level, irradiance ? 1 : roughnessForLevel(level, this.ggxMaxLevel), irradiance ? 'irradiance' : 'radiance');
131
+ }
132
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
133
+ if (this.baked[layer] !== 1) {
134
+ this.baked[layer] = 1;
135
+ this.bakedCount++;
136
+ }
137
+ }
138
+ /**
139
+ * Whether the shader may sample this, which needs **every** layer filled.
140
+ *
141
+ * A grid baked a probe a frame passes through a state where some layers hold whatever the driver
142
+ * left in them, and a fragment blending eight corners reads four of those. The gate is therefore
143
+ * the whole grid rather than any part of it — the same rule one probe already had, where
144
+ * `uEnvironmentEnabled` stayed at zero until a bake finished, for the same reason: a car
145
+ * mirroring uninitialised memory is worse than a car mirroring a gradient.
146
+ */
147
+ get ready() {
148
+ return !this.unusable && this.bakedCount === this.layers;
149
+ }
150
+ /** How many layers have been convolved, for a caller pacing a bake across frames. */
151
+ get filled() {
152
+ return this.bakedCount;
153
+ }
154
+ /** Whether this allocated at all. False means the scene renders without a grid. */
155
+ get usable() {
156
+ return !this.unusable;
157
+ }
158
+ dispose(gl) {
159
+ gl.deleteFramebuffer(this.framebuffer);
160
+ gl.deleteTexture(this.texture);
161
+ this.baked.fill(0);
162
+ this.bakedCount = 0;
163
+ }
164
+ }
@@ -0,0 +1,54 @@
1
+ /** An equirectangular image resampled onto the six faces of a cube. */
2
+ /**
3
+ * The direction a texel stands for, per face.
4
+ *
5
+ * `forward` is the face centre, `basisX` steps across a row and `basisY` down a column, matching
6
+ * `webgpu/probePass.ts`'s `PROBE_FACE_BASIS` exactly — the same table, and it is the same table
7
+ * because getting one sign wrong mirrors a single face, which projects to a plausible-looking
8
+ * wrong answer rather than to an error.
9
+ *
10
+ * **It lived in `irradianceSh.ts` until the spherical-harmonic path was retired**, and it moved
11
+ * here rather than being deleted with it: the capture is still a cube, so a loaded environment
12
+ * still has to know which direction each of its texels stands for. The prefilter's own copy went
13
+ * with the six-face loop, since an octahedral target has no faces at all.
14
+ */
15
+ export declare const FACE_BASIS: readonly {
16
+ readonly forward: readonly [number, number, number];
17
+ readonly basisX: readonly [number, number, number];
18
+ readonly basisY: readonly [number, number, number];
19
+ }[];
20
+ /** What a decoded `.hdr` looks like, restated structurally so this imports no package. */
21
+ export interface EquirectSource {
22
+ readonly width: number;
23
+ readonly height: number;
24
+ /** `width * height * 3` linear values, row-major from the top. */
25
+ readonly data: Float32Array;
26
+ }
27
+ /**
28
+ * Resample an equirectangular environment onto six cube faces.
29
+ *
30
+ * **Backend-neutral, and it produces exactly what the projection already takes.** The output is the
31
+ * shape a bake produces — six `size * size * 4` arrays of linear RGBA in
32
+ * cubemap order — so a loaded environment joins the captured path at the same place a bake does,
33
+ * and everything downstream of the cube is one implementation rather than two.
34
+ *
35
+ * **The face basis is imported rather than restated.** This is the fourth place that table would
36
+ * have appeared, and its failure mode is the one the 2026-08-17 rule is about: a mirrored face
37
+ * projects perfectly well onto a wrong answer, and the last time two copies disagreed it took
38
+ * projecting both backends' cubes onto one shared basis to find a sign in the linear Z band.
39
+ *
40
+ * ## The convention, stated because there is no universal one
41
+ *
42
+ * - **Row 0 is the zenith.** `v = acos(y) / pi`, so the top of the image is `+Y`. Inverting this
43
+ * puts the sky underfoot, and every surface is then lit from below with nothing in the picture
44
+ * to say why.
45
+ * - **The centre column is `-Z`.** `u = 0.5 + atan2(x, -z) / 2pi`, which is the engine's own camera
46
+ * convention — yaw 0 looks toward `-Z` and positive yaw turns toward `+X` — so `+X` lands three
47
+ * quarters of the way across. Choosing the mirror of this passes every brightness check and
48
+ * every sky-is-up check, and shows only as a reflection that turns the wrong way.
49
+ *
50
+ * **What it costs** is bilinear sampling per texel of the destination, once, at load. **What would
51
+ * make it wrong** is a source small enough that the cube is upsampling it — at that point the faces
52
+ * carry interpolation rather than image, and the honest answer is a smaller cube.
53
+ */
54
+ export declare function equirectToCubeFaces(source: EquirectSource, size: number): Float32Array[];