@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,121 @@
1
+ /**
2
+ * A device, a configured canvas, and loss adapted to the shape the renderer already handles.
3
+ *
4
+ * Everything WebGPU-specific about *owning* a drawing surface lives here, so that
5
+ * `webgpu/renderer.ts` is about drawing and this is about the context it draws into. The
6
+ * split matters because these two fail for unrelated reasons: a device is lost by a driver
7
+ * reset the page did not cause, and a frame is wrong because of something the frame did.
8
+ */
9
+ /**
10
+ * Take a canvas and a device, and hand back the surface the renderer draws into.
11
+ *
12
+ * **Device loss is a promise, and that is a different shape from the event WebGL gives.**
13
+ * `webglcontextlost` fires once and is missed by anybody not already listening;
14
+ * `device.lost` is a promise that resolves once, never rejects, and stays resolved. A
15
+ * renderer constructed after the loss therefore gets no event at all from the WebGL-shaped
16
+ * mental model, and would draw into a dead device forever without ever being told.
17
+ *
18
+ * So the resolution is latched here and `onLost` fires immediately for a listener that
19
+ * arrives late. Adapting it once, at the boundary, is why no call site has to know that the
20
+ * two APIs disagree about what a failure looks like — the same argument `contextLoss.ts`
21
+ * makes for owning the WebGL half rather than letting a game listen for it.
22
+ *
23
+ * **Disposal is not loss.** Tearing a surface down calls `destroy()`, which resolves
24
+ * `device.lost` exactly as a driver reset would. Reporting that to listeners would tell a
25
+ * consumer its GPU had failed every time it unmounted a canvas on purpose, so a disposed
26
+ * surface stays silent.
27
+ */
28
+ export function createGpuSurface(canvas, device) {
29
+ const context = canvas.getContext('webgpu');
30
+ if (context === null) {
31
+ throw new Error('createGpuSurface: the canvas would not give a webgpu context');
32
+ }
33
+ const format = navigator.gpu.getPreferredCanvasFormat();
34
+ const listeners = [];
35
+ let lost = false;
36
+ let disposed = false;
37
+ void device.lost.then(() => {
38
+ if (disposed)
39
+ return;
40
+ lost = true;
41
+ for (const listener of listeners)
42
+ listener();
43
+ });
44
+ /*
45
+ * **Say what the device rejected, because otherwise nothing does.**
46
+ *
47
+ * WebGPU does not throw on a bad resource. `createBindGroup` with a mismatched sample type
48
+ * returns an object that is invalid, every pass built on it records nothing, and the frame
49
+ * still presents — so the failure arrives as a picture that is merely wrong, and gets
50
+ * attributed to shaders, matrices and orientation in that order. That is not hypothetical:
51
+ * the shadow peel cost three implementations across two sessions, all of them measuring the
52
+ * frame produced by a pass that could not run, and one line of this would have named it.
53
+ * The water shader's invalid pipeline was the same silence.
54
+ *
55
+ * **Measured, because when it arrives decides whether it is any use.** Making the peel's
56
+ * exact mistake and listening gives *nothing* at `createBindGroup` — Dawn defers it — and
57
+ * then three messages at `queue.submit`, root cause first:
58
+ *
59
+ * None of the supported sample types (UnfilterableFloat|Depth) of
60
+ * [Texture "shadow.static"] match the expected sample types (Float).
61
+ * [Invalid BindGroup (unlabeled)] is invalid due to a previous error.
62
+ * [Invalid CommandBuffer] is invalid due to a previous error.
63
+ *
64
+ * So the useful line is there, and it is there a frame later than the call that caused it.
65
+ * **Label every resource**, because that first message is only readable thanks to
66
+ * `shadow.static` being one.
67
+ *
68
+ * `console.error` rather than a throw, and for that reason: submission is inside the frame
69
+ * loop, and the house rule is that nothing throws there. Once per distinct message, because
70
+ * an invalid bind group set per draw arrives every frame — the same argument `warnedFull`
71
+ * makes in the renderer.
72
+ */
73
+ const said = new Set();
74
+ device.addEventListener('uncapturederror', (event) => {
75
+ const { error } = event;
76
+ const message = error.message;
77
+ if (disposed || said.has(message))
78
+ return;
79
+ said.add(message);
80
+ console.error(`[driftengine] the GPU rejected something, and drew nothing for it:\n${message}`);
81
+ });
82
+ const configure = (width, height) => {
83
+ if (disposed)
84
+ return;
85
+ canvas.width = width;
86
+ canvas.height = height;
87
+ /*
88
+ * `opaque` rather than `premultiplied`: this engine draws a sky behind everything and
89
+ * has no use for a transparent canvas, and the opaque path is the one a compositor can
90
+ * take without a blend.
91
+ */
92
+ context.configure({ device, format, alphaMode: 'opaque' });
93
+ };
94
+ configure(canvas.width, canvas.height);
95
+ return {
96
+ device,
97
+ context,
98
+ canvas,
99
+ format,
100
+ get lost() {
101
+ return lost;
102
+ },
103
+ onLost(listener) {
104
+ /* Late is the normal case for a renderer built after a driver reset, not an edge one. */
105
+ if (lost) {
106
+ listener();
107
+ return;
108
+ }
109
+ listeners.push(listener);
110
+ },
111
+ configure,
112
+ dispose() {
113
+ if (disposed)
114
+ return;
115
+ disposed = true;
116
+ listeners.length = 0;
117
+ context.unconfigure();
118
+ device.destroy();
119
+ },
120
+ };
121
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * One recorded draw, in the only shape this backend ever issues.
3
+ *
4
+ * Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
5
+ * same every time: a pipeline, a bind group with up to two dynamic offsets, some vertex
6
+ * buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
7
+ * drawn except the values.
8
+ *
9
+ * So the frame graph does not need to know what a plume is. It records these fields and
10
+ * replays them, which is what turns migrating twenty-three verbs into twenty-three call-site
11
+ * edits rather than twenty-three implementations.
12
+ */
13
+ export interface DrawCommand {
14
+ pipeline: GPURenderPipeline | null;
15
+ bindGroup: GPUBindGroup | null;
16
+ /** Dynamic offsets, held as two numbers rather than an array so a reset stays free. */
17
+ offsetA: number;
18
+ offsetB: number;
19
+ offsetCount: number;
20
+ /** Fixed length; `vertexCount` says how many slots are live. */
21
+ readonly vertexBuffers: (GPUBuffer | null)[];
22
+ vertexCount: number;
23
+ indexBuffer: GPUBuffer | null;
24
+ indexed: boolean;
25
+ count: number;
26
+ instances: number;
27
+ }
28
+ export interface CommandPool {
29
+ commands: DrawCommand[];
30
+ taken: number;
31
+ /** The most any frame has taken, so growth converges instead of repeating. */
32
+ highWater: number;
33
+ }
34
+ export declare function createCommandPool(capacity: number): CommandPool;
35
+ /**
36
+ * Hand out the next command, growing if a frame overruns.
37
+ *
38
+ * The entry is **not cleared**. Every caller fills every field it uses, and clearing here would
39
+ * be a write per field per draw for no reader — the same reasoning the node arena uses.
40
+ */
41
+ export declare function takeCommand(pool: CommandPool): number;
42
+ /** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
43
+ export declare function resetPool(pool: CommandPool): void;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * One recorded draw, in the only shape this backend ever issues.
3
+ *
4
+ * Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
5
+ * same every time: a pipeline, a bind group with up to two dynamic offsets, some vertex
6
+ * buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
7
+ * drawn except the values.
8
+ *
9
+ * So the frame graph does not need to know what a plume is. It records these fields and
10
+ * replays them, which is what turns migrating twenty-three verbs into twenty-three call-site
11
+ * edits rather than twenty-three implementations.
12
+ */
13
+ /** The most vertex buffers any verb on this backend binds is three. Four leaves a margin. */
14
+ const VERTEX_BUFFER_SLOTS = 4;
15
+ function emptyCommand() {
16
+ return {
17
+ pipeline: null,
18
+ bindGroup: null,
19
+ offsetA: 0,
20
+ offsetB: 0,
21
+ offsetCount: 0,
22
+ vertexBuffers: new Array(VERTEX_BUFFER_SLOTS).fill(null),
23
+ vertexCount: 0,
24
+ indexBuffer: null,
25
+ indexed: false,
26
+ count: 0,
27
+ instances: 1,
28
+ };
29
+ }
30
+ export function createCommandPool(capacity) {
31
+ const commands = [];
32
+ for (let i = 0; i < capacity; i += 1)
33
+ commands.push(emptyCommand());
34
+ return { commands, taken: 0, highWater: 0 };
35
+ }
36
+ /**
37
+ * Hand out the next command, growing if a frame overruns.
38
+ *
39
+ * The entry is **not cleared**. Every caller fills every field it uses, and clearing here would
40
+ * be a write per field per draw for no reader — the same reasoning the node arena uses.
41
+ */
42
+ export function takeCommand(pool) {
43
+ const at = pool.taken;
44
+ while (at >= pool.commands.length)
45
+ pool.commands.push(emptyCommand());
46
+ pool.taken = at + 1;
47
+ if (pool.taken > pool.highWater)
48
+ pool.highWater = pool.taken;
49
+ return at;
50
+ }
51
+ /** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
52
+ export function resetPool(pool) {
53
+ pool.taken = 0;
54
+ }
@@ -0,0 +1,28 @@
1
+ /** Linear RGBA floats packed into whatever format the environment cube was actually allocated as. */
2
+ /** The packed texels and how wide one is, which is what a `writeTexture` layout needs. */
3
+ export interface PackedTexels {
4
+ readonly data: ArrayBufferView;
5
+ readonly bytesPerTexel: number;
6
+ }
7
+ /**
8
+ * Pack linear RGBA floats for `format`.
9
+ *
10
+ * **`writeTexture` does not convert, and that is the whole reason this exists.** Its `bytesPerRow`
11
+ * describes the *source* stride and it reads `width * bytesPerTexel-of-the-destination` bytes from
12
+ * each row — so float data handed to an eight-bit cube is a legal layout that reinterprets the raw
13
+ * bytes of the floats as unorm bytes. Nothing raises anything: no validation error, no device
14
+ * message, and a cube full of a plausible-looking environment.
15
+ *
16
+ * That is the 2026-08-14 family of WebGPU failure wearing its quietest face. The others at least
17
+ * invalidate a command buffer and leave an empty canvas; this one draws a picture.
18
+ *
19
+ * **Measured, because it was found by measuring rather than by reading.** On a uniform sky the
20
+ * other backend read 81 of 255 and this one read 45.7 from the same file. Neither number looks
21
+ * wrong on its own — the two backends being a control for each other is the only thing that
22
+ * separated them.
23
+ *
24
+ * **What it costs** is one conversion pass over six faces at load. **What would make it wrong** is
25
+ * a format this does not know, which is why the default arm throws rather than guessing: a guess
26
+ * here is exactly the silent picture this function exists to prevent.
27
+ */
28
+ export declare function environmentTexels(pixels: Float32Array, format: GPUTextureFormat): PackedTexels;
@@ -0,0 +1,79 @@
1
+ /** Linear RGBA floats packed into whatever format the environment cube was actually allocated as. */
2
+ import { toHalfFloats } from '../../halfFloat.js';
3
+ /**
4
+ * Pack linear RGBA floats for `format`.
5
+ *
6
+ * **`writeTexture` does not convert, and that is the whole reason this exists.** Its `bytesPerRow`
7
+ * describes the *source* stride and it reads `width * bytesPerTexel-of-the-destination` bytes from
8
+ * each row — so float data handed to an eight-bit cube is a legal layout that reinterprets the raw
9
+ * bytes of the floats as unorm bytes. Nothing raises anything: no validation error, no device
10
+ * message, and a cube full of a plausible-looking environment.
11
+ *
12
+ * That is the 2026-08-14 family of WebGPU failure wearing its quietest face. The others at least
13
+ * invalidate a command buffer and leave an empty canvas; this one draws a picture.
14
+ *
15
+ * **Measured, because it was found by measuring rather than by reading.** On a uniform sky the
16
+ * other backend read 81 of 255 and this one read 45.7 from the same file. Neither number looks
17
+ * wrong on its own — the two backends being a control for each other is the only thing that
18
+ * separated them.
19
+ *
20
+ * **What it costs** is one conversion pass over six faces at load. **What would make it wrong** is
21
+ * a format this does not know, which is why the default arm throws rather than guessing: a guess
22
+ * here is exactly the silent picture this function exists to prevent.
23
+ */
24
+ export function environmentTexels(pixels, format) {
25
+ switch (format) {
26
+ /* Already what the source is. No copy, because there is nothing to change. */
27
+ case 'rgba32float':
28
+ return { data: pixels, bytesPerTexel: 16 };
29
+ case 'rgba16float':
30
+ return { data: toHalf(pixels), bytesPerTexel: 8 };
31
+ case 'rgba8unorm':
32
+ return { data: toUnorm(pixels, false, false), bytesPerTexel: 4 };
33
+ case 'bgra8unorm':
34
+ return { data: toUnorm(pixels, true, false), bytesPerTexel: 4 };
35
+ /*
36
+ * An sRGB view decodes what it samples, so the byte stored has to be the *encoded* value or
37
+ * every environment comes back roughly twice as bright as the file. The engine's own scene
38
+ * targets are linear, so this arm is for a surface format a device chose rather than one this
39
+ * renderer asked for.
40
+ */
41
+ case 'rgba8unorm-srgb':
42
+ return { data: toUnorm(pixels, false, true), bytesPerTexel: 4 };
43
+ case 'bgra8unorm-srgb':
44
+ return { data: toUnorm(pixels, true, true), bytesPerTexel: 4 };
45
+ default:
46
+ throw new Error(`environmentTexels: no packing for "${format}". Add one rather than letting a wrong ` +
47
+ 'layout through — WebGPU accepts a mismatched stride without complaint and draws a ' +
48
+ 'plausible picture from reinterpreted bytes.');
49
+ }
50
+ }
51
+ function toHalf(pixels) {
52
+ return toHalfFloats(pixels);
53
+ }
54
+ /**
55
+ * Eight bits a channel, clipped at white.
56
+ *
57
+ * **Clipped rather than tone-mapped**, matching what the other backend does with a non-float cube
58
+ * and for the reason a bake documents at length: the cube stores radiance, and a curve applied here
59
+ * would be a viewing transform baked into stored light.
60
+ */
61
+ function toUnorm(pixels, swapRedAndBlue, encodeSrgb) {
62
+ const texels = pixels.length / 4;
63
+ const out = new Uint8Array(texels * 4);
64
+ for (let texel = 0; texel < texels; texel++) {
65
+ for (let channel = 0; channel < 3; channel++) {
66
+ const linear = pixels[texel * 4 + channel] ?? 0;
67
+ const clipped = linear <= 0 ? 0 : linear >= 1 ? 1 : linear;
68
+ const value = encodeSrgb ? srgbEncode(clipped) : clipped;
69
+ const at = texel * 4 + (swapRedAndBlue ? 2 - channel : channel);
70
+ out[at] = Math.round(value * 255);
71
+ }
72
+ out[texel * 4 + 3] = 255;
73
+ }
74
+ return out;
75
+ }
76
+ /** The sRGB transfer function, in the direction that prepares a value for a decoding sampler. */
77
+ function srgbEncode(linear) {
78
+ return linear <= 0.0031308 ? linear * 12.92 : 1.055 * linear ** (1 / 2.4) - 0.055;
79
+ }
@@ -0,0 +1,29 @@
1
+ import type { UniformFields } from './scatterPass.ts';
2
+ import type { PipelineCache } from './pipelineCache.ts';
3
+ /**
4
+ * The film pass: a thin wet layer — an oil slick, a puddle — lying over the world.
5
+ *
6
+ * Its own pass because it is its own material: view-dependent iridescence and a dissolving
7
+ * edge, neither of which the flat shader can express. `renderer.ts` says the rest, including
8
+ * why `sheen` is iridescence rather than wetness and where its usable range is.
9
+ *
10
+ * The geometry is an ordinary mesh, so the vertex layout is the flat pass's own — the shader
11
+ * reads position, normal, colour and a coverage weight, and the pipeline still has to describe
12
+ * every attribute the module declares.
13
+ */
14
+ export declare const FILM_VERT_FIELDS: UniformFields;
15
+ export declare const FILM_VERT_SIZE: 128;
16
+ export declare const FILM_FRAG_FIELDS: UniformFields;
17
+ export declare const FILM_FRAG_SIZE: 144;
18
+ export declare function createFilmBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
19
+ /** Bound once against both rings; a dynamic offset per film. See `createPanelBindGroup`. */
20
+ export declare function createFilmBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer, reflection: GPUTextureView, sampler: GPUSampler): GPUBindGroup;
21
+ /**
22
+ * The pipeline.
23
+ *
24
+ * **Alpha over, depth tested, depth not written.** A slick lies on the surface it was built
25
+ * against instead of fighting it for the depth buffer, which is what `renderer.ts` says by
26
+ * turning `depthMask` off around the draw. Writing depth would let a translucent patch occlude
27
+ * whatever is drawn after it.
28
+ */
29
+ export declare function filmPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, key: string, present: Readonly<Record<string, boolean>>): GPURenderPipeline;
@@ -0,0 +1,97 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.js';
2
+ import { FILM_BINDINGS, FILM_FRAG_WGSL, FILM_VERT_WGSL, } from '../../shaders/generated/film.wgsl.js';
3
+ import { vertexBufferLayouts } from './buffers.js';
4
+ import { DEPTH_FORMAT } from './flatPass.js';
5
+ import { shaderModule } from './shaderModules.js';
6
+ /**
7
+ * The film pass: a thin wet layer — an oil slick, a puddle — lying over the world.
8
+ *
9
+ * Its own pass because it is its own material: view-dependent iridescence and a dissolving
10
+ * edge, neither of which the flat shader can express. `renderer.ts` says the rest, including
11
+ * why `sheen` is iridescence rather than wetness and where its usable range is.
12
+ *
13
+ * The geometry is an ordinary mesh, so the vertex layout is the flat pass's own — the shader
14
+ * reads position, normal, colour and a coverage weight, and the pipeline still has to describe
15
+ * every attribute the module declares.
16
+ */
17
+ export const FILM_VERT_FIELDS = FILM_BINDINGS.FILM_VERT.fields;
18
+ export const FILM_VERT_SIZE = FILM_BINDINGS.FILM_VERT.uniformSize;
19
+ export const FILM_FRAG_FIELDS = FILM_BINDINGS.FILM_FRAG.fields;
20
+ export const FILM_FRAG_SIZE = FILM_BINDINGS.FILM_FRAG.uniformSize;
21
+ const VERT_BINDING = FILM_BINDINGS.FILM_VERT.uniforms;
22
+ const FRAG_BINDING = FILM_BINDINGS.FILM_FRAG.uniforms;
23
+ const REFLECTION = FILM_BINDINGS.FILM_FRAG.textures.uReflectionMap;
24
+ const VISIBILITY_VERTEX = 0x1;
25
+ const VISIBILITY_FRAGMENT = 0x2;
26
+ export function createFilmBindGroupLayout(device) {
27
+ return device.createBindGroupLayout({
28
+ label: 'film.layout',
29
+ entries: [
30
+ {
31
+ binding: VERT_BINDING,
32
+ visibility: VISIBILITY_VERTEX,
33
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: FILM_VERT_SIZE },
34
+ },
35
+ {
36
+ binding: FRAG_BINDING,
37
+ visibility: VISIBILITY_FRAGMENT,
38
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: FILM_FRAG_SIZE },
39
+ },
40
+ /*
41
+ * The mirror is an ordinary colour target, so a filtering sampler is right here — unlike
42
+ * every `...ShadowMap`, which is a depth format and cannot take one. `depthPass.ts` has
43
+ * the message the device gives when the two are confused.
44
+ */
45
+ { binding: REFLECTION.texture, visibility: VISIBILITY_FRAGMENT, texture: {} },
46
+ { binding: REFLECTION.sampler, visibility: VISIBILITY_FRAGMENT, sampler: {} },
47
+ ],
48
+ });
49
+ }
50
+ /** Bound once against both rings; a dynamic offset per film. See `createPanelBindGroup`. */
51
+ export function createFilmBindGroup(device, layout, vertices, fragments, reflection, sampler) {
52
+ return device.createBindGroup({
53
+ label: 'film.bindGroup',
54
+ layout,
55
+ entries: [
56
+ { binding: VERT_BINDING, resource: { buffer: vertices, size: FILM_VERT_SIZE } },
57
+ { binding: FRAG_BINDING, resource: { buffer: fragments, size: FILM_FRAG_SIZE } },
58
+ { binding: REFLECTION.texture, resource: reflection },
59
+ { binding: REFLECTION.sampler, resource: sampler },
60
+ ],
61
+ });
62
+ }
63
+ /**
64
+ * The pipeline.
65
+ *
66
+ * **Alpha over, depth tested, depth not written.** A slick lies on the surface it was built
67
+ * against instead of fighting it for the depth buffer, which is what `renderer.ts` says by
68
+ * turning `depthMask` off around the draw. Writing depth would let a translucent patch occlude
69
+ * whatever is drawn after it.
70
+ */
71
+ export function filmPipeline(cache, device, layout, key, present) {
72
+ return cache.get(key, () => ({
73
+ label: key,
74
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
75
+ vertex: {
76
+ module: shaderModule(device, { label: 'film.vert', code: FILM_VERT_WGSL }),
77
+ entryPoint: 'main',
78
+ buffers: vertexBufferLayouts(present),
79
+ },
80
+ fragment: {
81
+ module: shaderModule(device, { label: 'film.frag', code: FILM_FRAG_WGSL }),
82
+ entryPoint: 'main',
83
+ targets: [
84
+ {
85
+ format: cache.format,
86
+ blend: {
87
+ color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
88
+ alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
89
+ },
90
+ },
91
+ ],
92
+ },
93
+ primitive: { topology: 'triangle-list', cullMode: 'back' },
94
+ multisample: { count: cache.sampleCount },
95
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
96
+ }));
97
+ }
@@ -0,0 +1,213 @@
1
+ import type { PipelineCache } from './pipelineCache.ts';
2
+ /**
3
+ * The flat pipeline: the shader that draws the world.
4
+ *
5
+ * Built from the generated WGSL, with the bind group layout, the uniform sizes and every
6
+ * byte offset taken from the same generated file. **Nothing here restates a number the
7
+ * generator already knows** — a binding or an offset written twice is one that can disagree,
8
+ * and the disagreement draws a picture rather than raising an error.
9
+ *
10
+ * **Driven by the variant, not fixed to one.** `flatFrag` is sixteen permutations and they
11
+ * are not interchangeable: the one that compiles in the directional shadow path declares
12
+ * three more samplers and a 1,104-byte uniform block against the plain one's 1,072. Building
13
+ * the right shader and binding it against the wrong layout is a mistake that validates,
14
+ * draws, and is wrong, so the layout is derived from the variant every time.
15
+ */
16
+ /** A key into `FLAT_FRAG_WGSL`: the flags that are on, sorted, joined by `+`, or `none`. */
17
+ export type FlatVariant = string;
18
+ /** The four flags `flatFrag` permutes on, which is what decides which of sixteen to build. */
19
+ export interface FlatVariantFlags {
20
+ readonly directionalShadows: boolean;
21
+ readonly environmentProbe: boolean;
22
+ readonly nightEmissive: boolean;
23
+ readonly pointShadows: boolean;
24
+ }
25
+ /**
26
+ * The key for a set of flags.
27
+ *
28
+ * **The rule is `variantKey` in `scripts/wgsl.ts` and this is a second statement of it**, which
29
+ * is exactly the kind of restatement that drifts — except that a drift here cannot be silent:
30
+ * `flatFragmentBindings` throws on a key the generated table does not hold, at construction,
31
+ * naming the key it looked for. `scripts/` is a build tool and nothing under `src/` may import
32
+ * it, so a copy is the only option and a loud one is the acceptable form of it.
33
+ */
34
+ export declare function flatVariant(flags: FlatVariantFlags): FlatVariant;
35
+ /** Where one sampler's two halves ended up. */
36
+ export interface TextureBinding {
37
+ readonly texture: number;
38
+ readonly sampler: number;
39
+ readonly type: string;
40
+ }
41
+ /** What the generator recorded about one shader stage. */
42
+ export interface StageBindings {
43
+ readonly uniforms: number;
44
+ readonly uniformSize: number;
45
+ /**
46
+ * Byte offsets, and for an array the shape a `std140` block gives it.
47
+ *
48
+ * `length` and `stride` are present only on arrays, and `stride` is not `size / length`:
49
+ * every element gets its own sixteen-byte slot whatever it holds, so a `float[10]` is 160
50
+ * bytes. A writer that assumed packing would put ten lights in the space of two and a half
51
+ * and raise nothing, which is why the generator emits the number rather than leaving it to
52
+ * be derived.
53
+ */
54
+ readonly fields: Readonly<Record<string, {
55
+ readonly offset: number;
56
+ readonly size: number;
57
+ readonly length?: number;
58
+ readonly stride?: number;
59
+ }>>;
60
+ readonly textures: Readonly<Record<string, TextureBinding>>;
61
+ }
62
+ /** The key for a set of vertex flags: the same rule `variantKey` uses, flags on, sorted, joined. */
63
+ export declare function flatVertexKey(skinned: boolean, morphed: boolean, instanced?: boolean): string;
64
+ /** Everything the generator recorded about one variant of the vertex stage. */
65
+ export declare function flatVertexBindings(skinned: boolean, morphed?: boolean, instanced?: boolean): StageBindings;
66
+ export declare const FLAT_VERT_FIELDS: {
67
+ readonly uViewProj: {
68
+ readonly offset: 0;
69
+ readonly size: 64;
70
+ readonly type: "mat4";
71
+ };
72
+ readonly uHasTangents: {
73
+ readonly offset: 64;
74
+ readonly size: 4;
75
+ readonly type: "int";
76
+ };
77
+ readonly uLightViewProj: {
78
+ readonly offset: 80;
79
+ readonly size: 64;
80
+ readonly type: "mat4";
81
+ };
82
+ readonly uUvScale: {
83
+ readonly offset: 144;
84
+ readonly size: 8;
85
+ readonly type: "vec2";
86
+ };
87
+ readonly uModel: {
88
+ readonly offset: 160;
89
+ readonly size: 64;
90
+ readonly type: "mat4";
91
+ };
92
+ readonly uTint: {
93
+ readonly offset: 224;
94
+ readonly size: 12;
95
+ readonly type: "vec3";
96
+ };
97
+ readonly uWindDirection: {
98
+ readonly offset: 240;
99
+ readonly size: 8;
100
+ readonly type: "vec2";
101
+ };
102
+ readonly uWindSpeed: {
103
+ readonly offset: 248;
104
+ readonly size: 4;
105
+ readonly type: "float";
106
+ };
107
+ readonly uWindGust: {
108
+ readonly offset: 252;
109
+ readonly size: 4;
110
+ readonly type: "float";
111
+ };
112
+ readonly uWindTime: {
113
+ readonly offset: 256;
114
+ readonly size: 4;
115
+ readonly type: "float";
116
+ };
117
+ readonly uWindSpatialPhase: {
118
+ readonly offset: 264;
119
+ readonly size: 8;
120
+ readonly type: "vec2";
121
+ };
122
+ };
123
+ /**
124
+ * The **largest** variant's block, because one ring serves every draw.
125
+ *
126
+ * A ring strided for the plain block would leave a morphed draw writing its weights into the next
127
+ * slot, which is a scrambled neighbour rather than an error. The unused tail on a plain draw is
128
+ * 144 bytes a slot and is what a single ring costs.
129
+ */
130
+ export declare const FLAT_VERT_SIZE: number;
131
+ /** Everything the generator recorded about one permutation of the fragment stage. */
132
+ export declare function flatFragmentBindings(variant: FlatVariant): StageBindings;
133
+ /** The depth format both backends compare with. */
134
+ export { DEPTH_FORMAT } from '../../depthConvention.ts';
135
+ /**
136
+ * The layout this variant binds against.
137
+ *
138
+ * The vertex block is **dynamic**, because every draw supplies its own model matrix and tint
139
+ * from its own slot of one buffer. The fragment block is not: it holds the lights, the fog
140
+ * and the camera, settled once by `bindMeshPass` and unchanged between draws.
141
+ */
142
+ export declare function createFlatBindGroupLayout(device: GPUDevice, variant: FlatVariant, skinned?: boolean, morphed?: boolean): GPUBindGroupLayout;
143
+ /**
144
+ * Bind the buffers and one view per declared texture.
145
+ *
146
+ * `resolve` is asked for a view by the shader's own name for it, so a caller supplies the
147
+ * shadow maps it has and a stand-in for the rest. **Every declared binding must be filled
148
+ * even when the shader never samples it** — `uAlbedoEnabled` is zero for nearly all geometry
149
+ * and WebGPU still requires something there, which is why `renderer.ts` keeps an
150
+ * `emptyTexture2D` for the same reason on the other side.
151
+ */
152
+ export declare function createFlatBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, perDraw: GPUBuffer, perFrame: GPUBuffer, resolve: (name: string) => {
153
+ view: GPUTextureView;
154
+ sampler: GPUSampler;
155
+ },
156
+ /** The palette view for a skinned bind group, or null for an unskinned one. */
157
+ palette?: GPUTextureView | null,
158
+ /** The delta view for a morphed bind group, or null for an unmorphed one. */
159
+ deltas?: GPUTextureView | null): GPUBindGroup;
160
+ /**
161
+ * The pipeline, cached by the state that distinguishes it.
162
+ *
163
+ * The key names the variant and which optional attributes the mesh supplied, because those
164
+ * two decide the fragment module and the vertex layout. Built once per mesh at construction
165
+ * time rather than per frame, which is the rule `PipelineCache` exists to keep.
166
+ */
167
+ export declare function flatPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, key: string, present: Readonly<Record<string, boolean>>,
168
+ /**
169
+ * Alpha-blended, for `drawTranslucentMesh`.
170
+ *
171
+ * **A second pipeline rather than a flag on the first**, because blend state is baked into a
172
+ * WebGPU pipeline where WebGL2 toggles it around the draw with `gl.enable(BLEND)`. Keyed
173
+ * separately, so one mesh drawn both ways gets both and neither is rebuilt per frame.
174
+ *
175
+ * Depth still written, matching the other backend: `drawTranslucentMesh` there leaves
176
+ * `depthMask` alone and only turns blending on. A translucent part of a loaded model is a
177
+ * pane of glass in a solid object, not a particle, and it has to occlude what is behind it
178
+ * for the rest of the model to sort correctly.
179
+ */
180
+ translucent?: boolean,
181
+ /** Whether this pipeline reads a joint palette. See `FlatVertexOptions`. */
182
+ skinned?: boolean,
183
+ /** Whether this pipeline reads morph deltas. See `FlatVertexOptions`. */
184
+ morphed?: boolean,
185
+ /**
186
+ * Whether this pipeline writes depth, and which coplanar layer it draws on.
187
+ *
188
+ * **Both are pipeline state here and per-draw state on the other backend**, which is why they
189
+ * arrive as arguments and why the caller's key has to carry them: two draws of one mesh that
190
+ * differ only in these would otherwise share a cached pipeline and the second would silently
191
+ * get the first one's depth behaviour.
192
+ */
193
+ depthWrite?: boolean, depthLayer?: number,
194
+ /** Whether placement and tint arrive per instance. See `FlatVertexOptions`. */
195
+ instanced?: boolean,
196
+ /** Which order-independent buffer this pipeline writes, if any. The key must carry it. */
197
+ oit?: OitTarget): GPURenderPipeline;
198
+ /**
199
+ * The same pipeline, compiled off the main thread.
200
+ *
201
+ * **Preferred by everything that builds a mesh**, which is all of them: `createRenderPipeline`
202
+ * defers the shader compile to the first draw, so a scene that builds its meshes and then
203
+ * renders pays for every one of them inside a single frame. On a phone that is seconds of a
204
+ * blocked GPU queue with an idle main thread, which is invisible to every timer that is not
205
+ * this one. The descriptor is identical; only when the driver does the work changes.
206
+ */
207
+ export declare function flatPipelineAsync(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, key: string, present: Readonly<Record<string, boolean>>, translucent?: boolean,
208
+ /** Whether this pipeline reads a joint palette. See `FlatVertexOptions`. */
209
+ skinned?: boolean,
210
+ /** Whether this pipeline reads morph deltas. See `FlatVertexOptions`. */
211
+ morphed?: boolean): Promise<GPURenderPipeline>;
212
+ /** Which of the two order-independent buffers a pipeline writes, or neither. */
213
+ export type OitTarget = 'none' | 'accum' | 'reveal';