@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,802 @@
1
+ import type { Bounds } from '../../math/bounds.ts';
2
+ import type { Vec3 } from '../../math/color.ts';
3
+ import type { ReadonlyMat4 } from 'gl-matrix';
4
+ import type { MeshData } from '../mesh.ts';
5
+ import type { ProbeBakeOptions } from '../reflectionProbe.ts';
6
+ import type { Renderer, TranslucentMeshOptions } from './webgl2/renderer.ts';
7
+ import type { MeshInstances } from '../instances.ts';
8
+ import type { SurfaceMaterial } from '../surfaceTexture.ts';
9
+ import type { TextStyle } from '../textLayout.ts';
10
+ import type { SdfFont } from '../sdfFont.ts';
11
+ import type { SdfTextStyle } from '../sdfTextLayout.ts';
12
+ import type { FrameTimer } from './timer.ts';
13
+
14
+ /**
15
+ * Geometry on the device, as something a consumer holds and hands back.
16
+ *
17
+ * **Opaque on purpose, and the opacity is forced rather than chosen.** `Mesh` has private
18
+ * fields, which makes it *nominal* in TypeScript: no other type can ever satisfy it, however
19
+ * identical its shape, so a WebGPU mesh cannot be a `Mesh` and the shared surface cannot
20
+ * name one. That is not a flaw in `Mesh` — the privacy is what keeps `WebGLBuffer`s out of
21
+ * reach — it just means the surface has to describe the handle rather than the object.
22
+ *
23
+ * A consumer receives one from `createMesh` and passes it to `drawMesh`. There is nothing to
24
+ * read on it, which is the point: the backend that made it is the only thing that can.
25
+ */
26
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
27
+ export interface MeshHandle {
28
+ /*
29
+ * Otherwise empty. A *brand* property would make this a weak type, and TypeScript then rejects
30
+ * every assignment that shares no property with it — including a real `Mesh`, which is
31
+ * precisely what this has to accept.
32
+ *
33
+ * `bounds` is not a brand: both backends' meshes genuinely carry one, measured at upload, so
34
+ * naming it here costs nothing and is what lets a consumer cull or pick a level of detail
35
+ * without reaching past this surface for a backend-specific type.
36
+ */
37
+ readonly bounds: Bounds;
38
+ /**
39
+ * Whether all of this mesh's geometry has reached the device.
40
+ *
41
+ * True for every mesh `createMesh` returns; false between the steps of one from
42
+ * `createMeshIncremental`, until its last. **Nothing incomplete is drawn** — see that method
43
+ * for why, and for what a `done` upload with this still false means.
44
+ *
45
+ * Named here for the reason `bounds` is: both backends' meshes genuinely carry it, so a
46
+ * consumer can ask without reaching past this surface for a backend-specific type.
47
+ */
48
+ readonly complete: boolean;
49
+ }
50
+
51
+ /** A mesh on its way to the device, and the iterator that gets it there. */
52
+ export interface IncrementalMeshHandle {
53
+ /**
54
+ * Usable at once — it can be held, measured against `bounds`, and disposed — but not drawn
55
+ * until the upload finishes.
56
+ */
57
+ readonly mesh: MeshHandle;
58
+ /**
59
+ * Advance the upload by one bounded step. Done when it returns `done`.
60
+ *
61
+ * The call that returns `done` is the one that does the last step's work rather than an empty
62
+ * call after it, so a mesh takes exactly as many calls as it has chunks and a caller counting
63
+ * stops against a frame budget counts the right number.
64
+ */
65
+ readonly upload: Iterator<void, void>;
66
+ }
67
+
68
+ /**
69
+ * An instanced batch on the device, held by a consumer and handed back.
70
+ *
71
+ * **The second nominal type this surface hit, and for the same reason as `MeshHandle`.**
72
+ * `InstancedMesh` holds `WebGLBuffer`s in private fields, which makes it nominal: no WebGPU
73
+ * object can ever satisfy it however identical its shape. The privacy is right — it is what
74
+ * keeps a VAO out of a consumer's reach — so the surface describes the handle instead.
75
+ *
76
+ * A consumer gets one from `createScatter` and passes it to `drawScatter` and
77
+ * `uploadScatter`. Passing one backend's handle to the other is a caller error.
78
+ */
79
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
80
+ export interface ScatterHandle {
81
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
82
+ }
83
+
84
+ /**
85
+ * A mesh made drawable many times over, held by a consumer and handed back.
86
+ *
87
+ * Opaque for the reason `ScatterHandle` is, and distinct from it because what it batches is
88
+ * different: a scatter owns its own base geometry, and this one is *attached to a mesh the
89
+ * consumer already uploaded*. A car body is tens of megabytes and a second copy of it to draw it
90
+ * thirty times would defeat the point.
91
+ *
92
+ * A consumer gets one from `createInstanced` and passes it to `uploadInstanced`,
93
+ * `drawInstanced` and `drawTranslucentInstanced`.
94
+ */
95
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
96
+ export interface InstancedHandle {
97
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
98
+ }
99
+
100
+ /**
101
+ * A body of water on the device: its meshes and the numbers its grid settled.
102
+ *
103
+ * Opaque for the reason `MeshHandle` and `ScatterHandle` are — `WaterRenderer` holds
104
+ * `WebGLBuffer`s privately and is therefore nominal. The third of these, and the last one the
105
+ * derivation could not carry without help.
106
+ */
107
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
108
+ export interface WaterHandle {
109
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
110
+ }
111
+
112
+ /**
113
+ * A plume batch on the device. Opaque for the reason `MeshHandle` explains.
114
+ */
115
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
116
+ export interface PlumeHandle {
117
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
118
+ }
119
+
120
+ /** A particle pool on the device. Opaque for the reason `MeshHandle` explains. */
121
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
122
+ export interface ParticleHandle {
123
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
124
+ }
125
+
126
+ /**
127
+ * A wind-streak lattice on the device. Opaque for the reason `MeshHandle` explains.
128
+ *
129
+ * **`strengthFor` does not survive the widening, and that is deliberate.** It is on
130
+ * `WindStreakRenderer` so a caller can size its own budget against the same ramp the draw uses;
131
+ * naming it here would oblige every backend to carry a method rather than a lattice. The ramp
132
+ * itself is `windStreakStrength` in `windStreakDraw.ts`, which a consumer can call with the
133
+ * thresholds it chose and which is the one both backends draw with.
134
+ */
135
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
136
+ export interface WindStreakHandle {
137
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
138
+ }
139
+
140
+ /** A flock on the device. Opaque for the reason `MeshHandle` explains. */
141
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
142
+ export interface FlockHandle {
143
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
144
+ }
145
+
146
+ /** A water-lit surface on the device. Opaque for the reason `MeshHandle` explains. */
147
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
148
+ export interface CausticsHandle {
149
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
150
+ }
151
+
152
+ /** A batch of electrical arcs on the device. Opaque for the reason `MeshHandle` explains. */
153
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
154
+ export interface BoltHandle {
155
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
156
+ }
157
+
158
+ /** A batch of polyline segments on the device. Opaque for the reason `MeshHandle` explains. */
159
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
160
+ export interface LineHandle {
161
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
162
+ }
163
+
164
+ /**
165
+ * One text object: a string laid out as instanced glyph cubes. Opaque for the reason
166
+ * `MeshHandle` explains, and opaque *at all* for a reason the others did not have — it used to
167
+ * be a class holding a `WebGL2RenderingContext`, which pinned every caller of it to WebGL2.
168
+ */
169
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
170
+ export interface TextHandle {
171
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
172
+ }
173
+
174
+ /**
175
+ * One SDF text label: a string laid out as flat, textured quads from a distance-field font.
176
+ * Opaque for the reason `MeshHandle` explains, and for `TextHandle`'s own reason too — the
177
+ * concrete class on each backend holds a `WebGL2RenderingContext` or a `GPUDevice`'s buffers
178
+ * privately, so no shared type could name one without this.
179
+ */
180
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
181
+ export interface SdfTextHandle {
182
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
183
+ }
184
+
185
+ /**
186
+ * A caller's image on the device. Opaque for the reason `MeshHandle` explains.
187
+ *
188
+ * The boundary it guards is the interesting one: the engine ships no image assets and fetches
189
+ * nothing, so what goes in is a `TexImageSource` the consumer already has and what comes back
190
+ * is a GPU object with sane sampler state. Where the pixels came from stays theirs.
191
+ */
192
+ /* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- opaque by design */
193
+ export interface SurfaceTextureHandle {
194
+ /* Deliberately empty, for the weak-type reason `MeshHandle` explains. */
195
+ }
196
+
197
+ /**
198
+ * The public surface of the renderer, as a type a second backend can be checked against.
199
+ *
200
+ * **Derived rather than written.** `keyof` over a class yields its public members only — every
201
+ * `private` field, and this class has ninety-four of them holding `WebGLProgram`s and
202
+ * `WebGLUniformLocation`s, is excluded automatically. So this is exactly what a consumer can
203
+ * reach and nothing else, without a list anybody has to maintain.
204
+ *
205
+ * The point is that it cannot drift. Add a method to `Renderer` and `WebGPURenderer` stops
206
+ * compiling until it has one too, which is the compile-time form of the failure the
207
+ * 2026-08-02 design spec named as the real risk: a fallback that rots because only the
208
+ * developer's own backend is ever exercised. **That mechanism is free and it is the whole
209
+ * reason this file exists.**
210
+ *
211
+ * Eighty members: up from seventy-five with the five instanced-draw methods, which are widened
212
+ * for the reason the scatter ones are — a batch handle is nominal on WebGL2, holding a
213
+ * `WebGLBuffer` in a private field, so no WebGPU object can satisfy it however identical its
214
+ * shape. It is not meant to be read; it is meant to be enforced.
215
+ */
216
+ /** What a mesh needs to be told at creation that its geometry cannot say. */
217
+ export interface MeshOptions {
218
+ /**
219
+ * Whether this mesh's positions will be rewritten with `updateMesh`.
220
+ *
221
+ * Costs a `DYNAMIC_DRAW` hint on WebGL2 and a CPU-side copy of the interleaved vertex data on
222
+ * WebGPU, which interleaves every attribute into one buffer and so cannot patch a position
223
+ * without the rest of the vertex in hand. Both are paid only where a consumer asks.
224
+ */
225
+ readonly dynamic?: boolean;
226
+ }
227
+
228
+ export type RendererApi = Omit<
229
+ { [K in keyof Renderer]: Renderer[K] },
230
+ | 'gpuTimer'
231
+ | 'createMesh'
232
+ | 'createMeshIncremental'
233
+ | 'updateMesh'
234
+ | 'drawMesh'
235
+ | 'disposeMesh'
236
+ | 'drawTranslucentMesh'
237
+ | 'drawLightVolume'
238
+ | 'drawFilm'
239
+ | 'createScatter'
240
+ | 'drawScatter'
241
+ | 'uploadScatter'
242
+ | 'disposeScatter'
243
+ | 'createInstanced'
244
+ | 'uploadInstanced'
245
+ | 'drawInstanced'
246
+ | 'drawTranslucentInstanced'
247
+ | 'disposeInstanced'
248
+ | 'createWater'
249
+ | 'drawWater'
250
+ | 'disposeWater'
251
+ | 'createPlumes'
252
+ | 'drawPlumes'
253
+ | 'disposePlumes'
254
+ | 'setPlumeScale'
255
+ | 'createCaustics'
256
+ | 'drawCaustics'
257
+ | 'disposeCaustics'
258
+ | 'createParticles'
259
+ | 'drawParticles'
260
+ | 'disposeParticles'
261
+ | 'createWindStreaks'
262
+ | 'drawWindStreaks'
263
+ | 'disposeWindStreaks'
264
+ | 'createFlock'
265
+ | 'drawFlock'
266
+ | 'disposeFlock'
267
+ | 'createBolts'
268
+ | 'drawBolts'
269
+ | 'disposeBolts'
270
+ | 'createLines'
271
+ | 'drawLines'
272
+ | 'disposeLines'
273
+ | 'createText'
274
+ | 'setText'
275
+ | 'setPlate'
276
+ | 'drawText'
277
+ | 'textWidth'
278
+ | 'disposeText'
279
+ | 'createSdfText'
280
+ | 'setSdfText'
281
+ | 'drawSdfText'
282
+ | 'disposeSdfText'
283
+ | 'createSurfaceTexture'
284
+ | 'updateSurfaceTexture'
285
+ | 'disposeSurfaceTexture'
286
+ | 'setSurfaceTexture'
287
+ | 'setMaterial'
288
+ > & {
289
+ /** Upload a caller's image. See `SurfaceTextureHandle` for the boundary this guards. */
290
+ createSurfaceTexture(
291
+ source: TexImageSource,
292
+ options?: Parameters<Renderer['createSurfaceTexture']>[1],
293
+ ): SurfaceTextureHandle;
294
+
295
+ /**
296
+ * Replace a texture's pixels, keeping the GPU object and its sampler state.
297
+ *
298
+ * The binding a draw loop already holds stays valid, so the swap is a swap rather than a
299
+ * rebuild. Not a hot path: it re-uploads the whole image and rebuilds the mip chain.
300
+ */
301
+ updateSurfaceTexture(texture: SurfaceTextureHandle, source: TexImageSource): void;
302
+
303
+ disposeSurfaceTexture(texture: SurfaceTextureHandle): void;
304
+
305
+ /**
306
+ * Choose the texture the following `drawMesh` calls sample, or null for none.
307
+ *
308
+ * Pass state, because a texture belongs to a material and a material covers many draws.
309
+ * `bindMeshPass` resets it, so a pass cannot inherit a material from the one before it.
310
+ */
311
+ setSurfaceTexture(
312
+ texture: SurfaceTextureHandle | null,
313
+ uScale?: number,
314
+ vScale?: number,
315
+ cutout?: number,
316
+ ): void;
317
+
318
+ /**
319
+ * Everything the following `drawMesh` calls sample, in one call. Null for none.
320
+ *
321
+ * Pass state, exactly as `setSurfaceTexture` is, and `bindMeshPass` resets it for the same
322
+ * reason. This is the shape the maps of Phase 1.3 arrive through — a field each rather than a
323
+ * setter each — and `setSurfaceTexture` is now a wrapper over it.
324
+ */
325
+ setMaterial(material: SurfaceMaterial<SurfaceTextureHandle> | null): void;
326
+
327
+ /**
328
+ * A 3D text object: one string, drawn as instanced glyph cubes over the scene.
329
+ *
330
+ * Create one per message slot and reuse it — `setText` is a no-op when the string has not
331
+ * changed, and that skip is the difference between a free overlay and a per-frame upload.
332
+ */
333
+ createText(): TextHandle;
334
+
335
+ /** Lay a string out. A no-op when it is the string already laid out. */
336
+ setText(text: TextHandle, content: string): void;
337
+
338
+ /**
339
+ * A solid rectangle of cells, for a keycap or a backing plate — not a run of block glyphs,
340
+ * which comes out striped and sized in whole glyph widths. See `TextLayout.setPlate`.
341
+ */
342
+ setPlate(text: TextHandle, widthCells: number, heightCells: number, bottomCell: number): void;
343
+
344
+ /**
345
+ * Draw a laid-out string over the scene.
346
+ *
347
+ * The viewport is the caller's rather than the drawing buffer's, because an overlay is
348
+ * positioned in whatever box the caller is laying out in and that is not always the canvas.
349
+ * `originY` is a baseline, measured from the top.
350
+ */
351
+ drawText(
352
+ text: TextHandle,
353
+ viewportWidth: number,
354
+ viewportHeight: number,
355
+ originX: number,
356
+ originY: number,
357
+ style: TextStyle,
358
+ timeSec: number,
359
+ ): void;
360
+
361
+ /** Width of the string this handle currently holds. See `textWidthPx` for the static form. */
362
+ textWidth(text: TextHandle, cellSize: number): number;
363
+
364
+ /** Release a text object. Takes no context; see `Renderer.disposeScatter`. */
365
+ disposeText(text: TextHandle): void;
366
+
367
+ /**
368
+ * A text label from an SDF font. Opt-in: a consumer that never calls this pays nothing,
369
+ * which is what keeps `pixelFont.ts`'s no-asset promise true for everybody else.
370
+ */
371
+ createSdfText(): SdfTextHandle;
372
+
373
+ /**
374
+ * Lay a string out against a font, and retain the atlas `drawSdfText` will sample.
375
+ *
376
+ * The engine fetches nothing: `font` was parsed from a metrics document the caller already
377
+ * had, and `atlas` is a texture the caller already uploaded through `createSurfaceTexture`.
378
+ * A no-op, and no re-upload, when neither the text nor the style moved since the last call.
379
+ */
380
+ setSdfText(
381
+ text: SdfTextHandle,
382
+ font: SdfFont,
383
+ atlas: SurfaceTextureHandle,
384
+ content: string,
385
+ style: SdfTextStyle,
386
+ ): void;
387
+
388
+ /**
389
+ * Draw a laid-out SDF string into the scene, at `model`, against the frame's own
390
+ * view-projection — the same one `drawMesh` uses. See `Renderer.drawSdfText`.
391
+ */
392
+ drawSdfText(text: SdfTextHandle, model: Float32Array, color: Vec3, opacity: number): void;
393
+
394
+ /** Release an SDF text label. Takes no context; see `Renderer.disposeScatter`. */
395
+ disposeSdfText(text: SdfTextHandle): void;
396
+
397
+ /** Build a lattice of wind-borne debris. See `WindStreakHandle` for why it is opaque. */
398
+ createWindStreaks(options?: Parameters<Renderer['createWindStreaks']>[0]): WindStreakHandle;
399
+
400
+ /** Draw the wind, after the opaque scene. The engine decides whether the camera is under. */
401
+ drawWindStreaks(
402
+ streaks: WindStreakHandle,
403
+ camera: Parameters<Renderer['drawWindStreaks']>[1],
404
+ wind: Parameters<Renderer['drawWindStreaks']>[2],
405
+ timeSeconds: number,
406
+ tint: Vec3,
407
+ env: Parameters<Renderer['drawWindStreaks']>[5],
408
+ ): void;
409
+
410
+ /** Release a lattice. Takes no context; see `Renderer.disposeScatter`. */
411
+ disposeWindStreaks(streaks: WindStreakHandle): void;
412
+
413
+ /** Scale one plume in a batch, 0 to hide it — a fire that is not always burning. */
414
+ setPlumeScale(plumes: PlumeHandle, index: number, scale: number): void;
415
+
416
+ /**
417
+ * A surface lit by nearby water. Null where the profile has water off or there are no sheets,
418
+ * so a scene's own `drawCaustics(null, …)` guard reads the same on either backend.
419
+ */
420
+ createCaustics(sheets: Parameters<Renderer['createCaustics']>[0]): CausticsHandle | null;
421
+
422
+ /** Add the water's light to an already-shaded scene. Draw after the opaque pass. */
423
+ drawCaustics(
424
+ caustics: CausticsHandle | null,
425
+ camera: Parameters<Renderer['drawCaustics']>[1],
426
+ timeSeconds: number,
427
+ env: Parameters<Renderer['drawCaustics']>[3],
428
+ windX?: number,
429
+ windZ?: number,
430
+ strength?: number,
431
+ ): void;
432
+
433
+ disposeCaustics(caustics: CausticsHandle | null): void;
434
+
435
+ /** Build a flock of `count` birds. See `FlockHandle` for why it is opaque. */
436
+ createFlock(count: number): FlockHandle;
437
+
438
+ /** Draw a flock. Every bird's path comes from its index and the clock. */
439
+ drawFlock(
440
+ flock: FlockHandle,
441
+ camera: Parameters<Renderer['drawFlock']>[1],
442
+ timeSeconds: number,
443
+ params: Parameters<Renderer['drawFlock']>[3],
444
+ tint: Vec3,
445
+ windX?: number,
446
+ windZ?: number,
447
+ ): void;
448
+
449
+ /** Release a flock. Takes no context; see `Renderer.disposeScatter`. */
450
+ disposeFlock(flock: FlockHandle): void;
451
+
452
+ /** Build a batch for electrical arcs. `capacity` is in segments, not arcs. */
453
+ createBolts(segmentCapacity: number, label?: string): BoltHandle;
454
+
455
+ /** Draw a pool of arcs, after the opaque scene. */
456
+ drawBolts(
457
+ batch: BoltHandle,
458
+ data: Parameters<Renderer['drawBolts']>[1],
459
+ camera: Parameters<Renderer['drawBolts']>[2],
460
+ env: Parameters<Renderer['drawBolts']>[3],
461
+ timeSeconds: number,
462
+ core: Vec3,
463
+ edge: Vec3,
464
+ widthM: number,
465
+ coreGain: number,
466
+ minWidthPerMetre?: number,
467
+ ): void;
468
+
469
+ /** Release a batch of arcs. Takes no context; see `Renderer.disposeScatter`. */
470
+ disposeBolts(batch: BoltHandle): void;
471
+
472
+ /**
473
+ * Build a batch for a polyline. `capacity` is in segments, not points.
474
+ *
475
+ * There is no portable wide line: WebGL2 clamps `lineWidth` to one pixel on nearly every
476
+ * driver and WebGPU has no line width at all, so a stroke is a triangle everywhere or it
477
+ * is nowhere. See `Renderer.createLines`.
478
+ *
479
+ * **One handle, one polyline's geometry, for the frame it is drawn in.** Drawing a handle
480
+ * more than once a frame with unchanged content is fine; drawing it more than once with
481
+ * *different* content in the same frame is not — see `Renderer.createLines` for the reason,
482
+ * which is backend-specific: WebGPU reads the last write only, WebGL2 reads whichever content
483
+ * was current at each call. A consumer that wants several polylines whose geometry differs
484
+ * within one frame needs several handles.
485
+ */
486
+ createLines(segmentCapacity: number, label?: string): LineHandle;
487
+
488
+ /**
489
+ * Draw a polyline, after the opaque scene.
490
+ *
491
+ * `widthM` is the stroke's own half-width and `minWidthPerMetre` the floor that keeps a
492
+ * distant line above a pixel. `softness` widens the antialiased edge inward, as a fraction
493
+ * of the half-width; zero is a clean edge. See `Renderer.drawLines`.
494
+ */
495
+ drawLines(
496
+ lines: LineHandle,
497
+ data: Parameters<Renderer['drawLines']>[1],
498
+ model: Parameters<Renderer['drawLines']>[2],
499
+ camera: Parameters<Renderer['drawLines']>[3],
500
+ env: Parameters<Renderer['drawLines']>[4],
501
+ color: Vec3,
502
+ widthM: number,
503
+ opacity: number,
504
+ softness?: number,
505
+ minWidthPerMetre?: number,
506
+ additive?: boolean,
507
+ ): void;
508
+
509
+ /** Release a batch of line segments. Takes no context; see `Renderer.disposeScatter`. */
510
+ disposeLines(lines: LineHandle): void;
511
+
512
+ /** Base geometry plus placement in, handle out. See `ScatterHandle` for why it is opaque. */
513
+ createScatter(base: MeshData, data: Parameters<Renderer['createScatter']>[1]): ScatterHandle;
514
+
515
+ /** Draw every live instance of a batch this renderer made, in one call. */
516
+ drawScatter(
517
+ scatter: ScatterHandle,
518
+ data: Parameters<Renderer['drawScatter']>[1],
519
+ camera: Parameters<Renderer['drawScatter']>[2],
520
+ env: Parameters<Renderer['drawScatter']>[3],
521
+ windX: number,
522
+ windZ: number,
523
+ windGust: number,
524
+ timeSeconds: number,
525
+ trample?: Float32Array | null,
526
+ ): void;
527
+
528
+ /** Push changed instances. Only for batches that move; foliage is uploaded once. */
529
+ uploadScatter(scatter: ScatterHandle, data: Parameters<Renderer['uploadScatter']>[1]): void;
530
+
531
+ /** Release a batch this renderer made. Takes no context; see `Renderer.disposeScatter`. */
532
+ disposeScatter(scatter: ScatterHandle): void;
533
+
534
+ /**
535
+ * Make a mesh drawable many times over, at up to `capacity` placements.
536
+ *
537
+ * **Takes a mesh already on the device**, unlike `createScatter`, which uploads its own base.
538
+ * The geometry an instanced draw repeats is usually the expensive kind — a loaded model rather
539
+ * than a blade of grass — and a second copy of it is the cost this exists to avoid.
540
+ *
541
+ * **One batch per mesh.** WebGL2 attaches the per-instance attributes to that mesh's own vertex
542
+ * array, of which a mesh has one, so a second batch would rebind the attributes the first draws
543
+ * through and place one batch's instances by the other's matrices. Refused, loudly.
544
+ *
545
+ * **What it gives up** is skinning and morphing on the instanced mesh: the joint attributes
546
+ * want the two locations the matrix does, and a morph weight is per draw, so every instance
547
+ * would wear one expression. Both are refused where the variant is built rather than dropped
548
+ * quietly.
549
+ */
550
+ createInstanced(mesh: MeshHandle, capacity: number): InstancedHandle;
551
+
552
+ /**
553
+ * Push placement and colour to the device. Only `data.count` instances are written.
554
+ *
555
+ * Called per frame for a batch that moves, exactly as `uploadScatter` is for one that does.
556
+ * Allocates nothing: the staging array belongs to the batch.
557
+ */
558
+ uploadInstanced(batch: InstancedHandle, data: MeshInstances): void;
559
+
560
+ /**
561
+ * Draw every live instance of a batch, in one call and one material.
562
+ *
563
+ * The material is whatever `setMaterial` and the surface setters last established, exactly as
564
+ * for `drawMesh` — which is the point: a batch spends **one** slot of the frame's material ring
565
+ * where the same meshes drawn individually spend one each.
566
+ */
567
+ drawInstanced(batch: InstancedHandle, data: MeshInstances): void;
568
+
569
+ /**
570
+ * The blended twin, for an instanced mesh whose material is not opaque.
571
+ *
572
+ * Takes the same options as `drawTranslucentMesh` and for the same reasons — a set of blended
573
+ * surfaces that all write depth rejects itself, so a model whose interior is glass wants
574
+ * `depthWrite: false` here as much as it does there.
575
+ */
576
+ drawTranslucentInstanced(
577
+ batch: InstancedHandle,
578
+ data: MeshInstances,
579
+ opacity: number,
580
+ options?: TranslucentMeshOptions,
581
+ ): void;
582
+
583
+ /** Release a batch. The mesh it was attached to is the caller's and is not released. */
584
+ disposeInstanced(batch: InstancedHandle): void;
585
+
586
+ /** Build a body of water. See `WaterHandle` for why it is opaque. */
587
+ createWater(resolution?: number, nearExtent?: number, farHalfExtent?: number): WaterHandle;
588
+
589
+ /** Draw a body of water this renderer made, after the opaque scene. */
590
+ drawWater(
591
+ water: WaterHandle,
592
+ camera: Parameters<Renderer['drawWater']>[1],
593
+ timeSeconds: number,
594
+ settings: Parameters<Renderer['drawWater']>[3],
595
+ env: Parameters<Renderer['drawWater']>[4],
596
+ windX?: number,
597
+ windZ?: number,
598
+ ): void;
599
+
600
+ /** Release a body of water. Takes no context; see `Renderer.disposeScatter`. */
601
+ disposeWater(water: WaterHandle): void;
602
+
603
+ /** Build a plume batch from placements and a named material. */
604
+ createPlumes(
605
+ plumes: Parameters<Renderer['createPlumes']>[0],
606
+ options: Parameters<Renderer['createPlumes']>[1],
607
+ ): PlumeHandle;
608
+
609
+ /** Draw a plume batch, after the opaque scene. */
610
+ drawPlumes(
611
+ plumes: PlumeHandle,
612
+ camera: Parameters<Renderer['drawPlumes']>[1],
613
+ timeSeconds: number,
614
+ env: Parameters<Renderer['drawPlumes']>[3],
615
+ windX?: number,
616
+ windZ?: number,
617
+ originX?: number,
618
+ originY?: number,
619
+ originZ?: number,
620
+ ): void;
621
+
622
+ /** Release a plume batch. */
623
+ disposePlumes(plumes: PlumeHandle): void;
624
+
625
+ /**
626
+ * Build a particle pool from a capacity and a named material.
627
+ *
628
+ * **`reuse` is re-typed here, and it has to be.** `ParticleBatchOptions.reuse` names the
629
+ * concrete `ParticleBatch`, so the surface handed back a `ParticleHandle` from this very
630
+ * method and then refused to accept it — a consumer that had done everything else right
631
+ * could not share a program without holding the WebGL2 class it had just been moved off.
632
+ * That is the same defect as the one that pinned callers to `Renderer` itself, arrived at
633
+ * from the input side.
634
+ *
635
+ * **WebGPU ignores it, and that is correct rather than a gap.** Its pipelines are cached on
636
+ * `particle:${material}:${blend}` — exactly what decides the program — so pools that would
637
+ * have shared one already do. WebGL2 still needs telling, and still checks that the two
638
+ * materials match.
639
+ */
640
+ createParticles(
641
+ capacity: number,
642
+ options: Omit<Parameters<Renderer['createParticles']>[1], 'reuse'> & {
643
+ readonly reuse?: ParticleHandle;
644
+ },
645
+ ): ParticleHandle;
646
+
647
+ /** Draw a pool's live particles, after the opaque scene. */
648
+ drawParticles(
649
+ batch: ParticleHandle,
650
+ data: Parameters<Renderer['drawParticles']>[1],
651
+ camera: Parameters<Renderer['drawParticles']>[2],
652
+ env: Parameters<Renderer['drawParticles']>[3],
653
+ timeSeconds: number,
654
+ ): void;
655
+
656
+ /** Release a particle pool. */
657
+ disposeParticles(batch: ParticleHandle): void;
658
+
659
+ /** Draw a wet film over geometry, using a handle as the surface it lies on. */
660
+ drawFilm(
661
+ mesh: MeshHandle,
662
+ camera: Parameters<Renderer['drawFilm']>[1],
663
+ timeSeconds: number,
664
+ env: Parameters<Renderer['drawFilm']>[3],
665
+ sheen: number,
666
+ options?: Parameters<Renderer['drawFilm']>[5],
667
+ ): void;
668
+
669
+ /**
670
+ * Light the scene from an environment it did not photograph.
671
+ *
672
+ * Takes the equirectangular image rather than six faces, so the renderer converts at its own
673
+ * probe size and a caller cannot hand it faces of the wrong dimension. Downstream of the cube
674
+ * this is exactly a bake: the same prefilter, the same spherical-harmonic projection.
675
+ *
676
+ * Answers `false` and says why when the profile has no probe — `reflectionProbeSize` defaults to
677
+ * zero, so a consumer that never asked for one gets a refusal in words rather than an
678
+ * environment that silently did nothing.
679
+ */
680
+ setEnvironmentImage(
681
+ image: {
682
+ readonly width: number;
683
+ readonly height: number;
684
+ readonly data: Float32Array;
685
+ },
686
+ options?: ProbeBakeOptions,
687
+ ): boolean;
688
+
689
+ /** Draw a volume of light along the view ray, using a handle as its bounding geometry. */
690
+ drawLightVolume(
691
+ mesh: MeshHandle,
692
+ model: ReadonlyMat4,
693
+ camera: Parameters<Renderer['drawLightVolume']>[2],
694
+ strength: number,
695
+ reachM: number,
696
+ spread: number,
697
+ options?: Parameters<Renderer['drawLightVolume']>[6],
698
+ ): void;
699
+
700
+ /**
701
+ * Geometry in, handle out. Widened for the reason `MeshHandle` explains: `Mesh` is nominal.
702
+ *
703
+ * The second member the derivation could not carry, and found the same way as the first —
704
+ * by a second backend failing to compile against it rather than by anybody noticing.
705
+ */
706
+ createMesh(data: MeshData, options?: MeshOptions): MeshHandle;
707
+
708
+ /**
709
+ * Geometry in, handle out — but the geometry lands over as many frames as the caller gives it.
710
+ *
711
+ * **What this is for.** A game streaming a world in squares held a 4 ms frame budget and
712
+ * honoured it exactly, for the half of the work it owned. The other half was one `createMesh`
713
+ * per material group, about two dozen a square, all of them in whichever frame the build
714
+ * happened to finish in and outside every budget. Attributed in the browser over a drive into
715
+ * a town, every frame over 50 ms was `createMesh` and nothing else, and disposal and
716
+ * bookkeeping never reached 2. Spreading a square across its groups would not have been
717
+ * enough: one group was 248,928 of that square's 367,542 triangles, so the group itself had to
718
+ * become divisible, and `createMesh` is where that is decided.
719
+ *
720
+ * Drive `upload` under a frame budget — `StepBudget` is the pump built for it — and the
721
+ * geometry arrives over as many frames as that allows. A mesh of *n* chunks takes exactly *n*
722
+ * calls, and the call that returns `done` is the one that does the last of the work.
723
+ *
724
+ * **A mesh that has not finished arriving is not drawn.** `complete` says so, and `drawMesh`,
725
+ * `drawTranslucentMesh` and `drawLightVolume` skip it in silence. Drawing what had landed was
726
+ * the alternative and is worse — a mesh whose triangle count grows over several frames is a
727
+ * stranger artefact than a square that is briefly absent, and it is the direction a streaming
728
+ * consumer already treats as safe. So a consumer that never drives the iterator gets a mesh
729
+ * that never appears, not a fan of triangles through the origin.
730
+ *
731
+ * **A lost device or context ends the upload.** The iterator reports `done` and the mesh stays
732
+ * incomplete, which is the pair that distinguishes an abandoned upload from a finished one.
733
+ * There is no way to detect a half-uploaded mesh from the outside, so the engine says what it
734
+ * does rather than leaving a consumer to guess.
735
+ *
736
+ * What is paid up front and not spread: validation, the bounds, the buffer allocations and the
737
+ * pipeline warming. The bounds are the deliberate one — a streamer places and culls a region
738
+ * from them before a byte of it has landed.
739
+ */
740
+ createMeshIncremental(data: MeshData, options?: MeshOptions): IncrementalMeshHandle;
741
+
742
+ /**
743
+ * Rewrite a mesh's positions, and its normals where the caller has them.
744
+ *
745
+ * **What this exists for is cloth**, and it is a gap the engine shipped with: `ClothBody` has
746
+ * been in `@driftengine/physics` since 2.9 and nothing could draw its output. A mesh was
747
+ * immutable, so a deforming surface could only be drawn by recreating it every frame — a GPU
748
+ * buffer allocation per frame, which the frame rules forbid — or by splitting it into rigid
749
+ * quads with a matrix each, which caps the resolution at the number of draw calls a consumer
750
+ * can afford. A consumer found it by trying to hang a banner.
751
+ *
752
+ * **Only positions and normals.** Colour, emissive and the rest describe what a surface *is*
753
+ * and do not change because it bent; rewriting them every frame would be uploading unchanged
754
+ * bytes. The vertex *count* is fixed: the index buffer, the pipeline and every other attribute
755
+ * are sized against it, and an update of a different size is refused naming both.
756
+ *
757
+ * The mesh must have been created with `{ dynamic: true }`. That is not ceremony — it decides
758
+ * the buffer hint on one backend and what has to be kept on the other, and a mesh that never
759
+ * deforms should pay for neither.
760
+ */
761
+ updateMesh(mesh: MeshHandle, positions: Float32Array, normals?: Float32Array): void;
762
+
763
+ /** Draw a handle this renderer made. Passing one from the other backend is a caller error. */
764
+ drawMesh(mesh: MeshHandle, model: ReadonlyMat4, depthLayer?: number, tint?: Vec3 | null): void;
765
+
766
+ /** Release the geometry behind a handle. */
767
+ disposeMesh(mesh: MeshHandle): void;
768
+
769
+ /**
770
+ * Draw a handle with blending, back to front against what is already there.
771
+ *
772
+ * Lit and fogged by default; `options` can turn either off, independently — see
773
+ * `TranslucentMeshOptions` and `Renderer.drawTranslucentMesh` for what each means and why
774
+ * a caller might want one without the other. Both backends read the same defaults, so a
775
+ * call with no fourth argument draws exactly as it did before this existed.
776
+ *
777
+ * `depthWrite` and `depthLayer` are the two that decide how a *set* of blended surfaces
778
+ * resolves against itself: whether this draw claims the depth buffer, and which of two
779
+ * coplanar surfaces wins where they coincide. Per-draw state on WebGL2 and pipeline state on
780
+ * WebGPU, and the same depth either way — `depthOffsetForLayer` is the one decision both read.
781
+ */
782
+ drawTranslucentMesh(
783
+ mesh: MeshHandle,
784
+ model: ReadonlyMat4,
785
+ opacity: number,
786
+ options?: TranslucentMeshOptions,
787
+ ): void;
788
+
789
+ /**
790
+ * Widened, because this is the one member that cannot cross as it stands.
791
+ *
792
+ * `GpuTimer` is a `WebGLQuery` pool. Left derived, it would oblige a WebGPU renderer to
793
+ * produce one, which it cannot do and should not fake. Every other member of this surface
794
+ * is already backend-neutral; the audit that established that is worth repeating before
795
+ * anything else is overridden here, because each override is a place the two backends are
796
+ * allowed to differ and therefore a place the compiler stops helping.
797
+ */
798
+ readonly gpuTimer: FrameTimer;
799
+ };
800
+
801
+ /** Which backend is actually drawing. Reported, never inferred. */
802
+ export type RenderBackend = 'webgl2' | 'webgpu';