@thunderclap-engine/engine 0.0.0-stage → 1.1.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 (566) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/LICENSE +21 -0
  3. package/README.md +333 -2
  4. package/dist/analytics/analytics.d.ts +80 -0
  5. package/dist/analytics/analytics.js +129 -0
  6. package/dist/analytics/index.d.ts +1 -0
  7. package/dist/analytics/index.js +1 -0
  8. package/dist/anim/aim.d.ts +43 -0
  9. package/dist/anim/aim.js +157 -0
  10. package/dist/anim/clip.d.ts +98 -0
  11. package/dist/anim/clip.js +282 -0
  12. package/dist/anim/compress.d.ts +65 -0
  13. package/dist/anim/compress.js +339 -0
  14. package/dist/anim/foot-ik.d.ts +74 -0
  15. package/dist/anim/foot-ik.js +241 -0
  16. package/dist/anim/graph.d.ts +153 -0
  17. package/dist/anim/graph.js +532 -0
  18. package/dist/anim/ik.d.ts +105 -0
  19. package/dist/anim/ik.js +435 -0
  20. package/dist/anim/index.d.ts +36 -0
  21. package/dist/anim/index.js +21 -0
  22. package/dist/anim/match.d.ts +66 -0
  23. package/dist/anim/match.js +153 -0
  24. package/dist/anim/mixer.d.ts +113 -0
  25. package/dist/anim/mixer.js +314 -0
  26. package/dist/anim/morph.d.ts +41 -0
  27. package/dist/anim/morph.js +94 -0
  28. package/dist/anim/pose.d.ts +74 -0
  29. package/dist/anim/pose.js +254 -0
  30. package/dist/anim/quat.d.ts +44 -0
  31. package/dist/anim/quat.js +187 -0
  32. package/dist/anim/retarget.d.ts +97 -0
  33. package/dist/anim/retarget.js +366 -0
  34. package/dist/anim/root-motion.d.ts +44 -0
  35. package/dist/anim/root-motion.js +224 -0
  36. package/dist/anim/skin-pose.d.ts +39 -0
  37. package/dist/anim/skin-pose.js +53 -0
  38. package/dist/anim/socket.d.ts +47 -0
  39. package/dist/anim/socket.js +84 -0
  40. package/dist/anim/spring-chain.d.ts +73 -0
  41. package/dist/anim/spring-chain.js +294 -0
  42. package/dist/assets/atlas.d.ts +90 -0
  43. package/dist/assets/atlas.js +212 -0
  44. package/dist/assets/baked.d.ts +33 -0
  45. package/dist/assets/baked.js +38 -0
  46. package/dist/assets/bundle.d.ts +88 -0
  47. package/dist/assets/bundle.js +464 -0
  48. package/dist/assets/cache.d.ts +56 -0
  49. package/dist/assets/cache.js +123 -0
  50. package/dist/assets/gltf-load.d.ts +252 -0
  51. package/dist/assets/gltf-load.js +661 -0
  52. package/dist/assets/gltf-skin.d.ts +36 -0
  53. package/dist/assets/gltf-skin.js +109 -0
  54. package/dist/assets/gltf.d.ts +706 -0
  55. package/dist/assets/gltf.js +1376 -0
  56. package/dist/assets/index.d.ts +20 -0
  57. package/dist/assets/index.js +10 -0
  58. package/dist/assets/ktx2.d.ts +71 -0
  59. package/dist/assets/ktx2.js +213 -0
  60. package/dist/assets/manifest.d.ts +79 -0
  61. package/dist/assets/manifest.js +7 -0
  62. package/dist/assets/meshopt.d.ts +23 -0
  63. package/dist/assets/meshopt.js +403 -0
  64. package/dist/audio/audio.d.ts +733 -0
  65. package/dist/audio/audio.js +2013 -0
  66. package/dist/audio/dsp.d.ts +61 -0
  67. package/dist/audio/dsp.js +159 -0
  68. package/dist/audio/duck.d.ts +44 -0
  69. package/dist/audio/duck.js +101 -0
  70. package/dist/audio/envelope.d.ts +53 -0
  71. package/dist/audio/envelope.js +106 -0
  72. package/dist/audio/index.d.ts +13 -0
  73. package/dist/audio/index.js +14 -0
  74. package/dist/audio/music.d.ts +113 -0
  75. package/dist/audio/music.js +548 -0
  76. package/dist/audio/occlusion.d.ts +55 -0
  77. package/dist/audio/occlusion.js +61 -0
  78. package/dist/audio/persist.d.ts +23 -0
  79. package/dist/audio/persist.js +27 -0
  80. package/dist/audio/recipes.d.ts +55 -0
  81. package/dist/audio/recipes.js +227 -0
  82. package/dist/audio/send.d.ts +41 -0
  83. package/dist/audio/send.js +118 -0
  84. package/dist/audio/sprites.d.ts +59 -0
  85. package/dist/audio/sprites.js +43 -0
  86. package/dist/audio/synth.d.ts +103 -0
  87. package/dist/audio/synth.js +197 -0
  88. package/dist/audio/variations.d.ts +25 -0
  89. package/dist/audio/variations.js +55 -0
  90. package/dist/audio/zones.d.ts +100 -0
  91. package/dist/audio/zones.js +167 -0
  92. package/dist/core/detached-surface.d.ts +44 -0
  93. package/dist/core/detached-surface.js +104 -0
  94. package/dist/core/events.d.ts +24 -0
  95. package/dist/core/events.js +43 -0
  96. package/dist/core/game.d.ts +409 -0
  97. package/dist/core/game.js +530 -0
  98. package/dist/core/hash.d.ts +24 -0
  99. package/dist/core/hash.js +49 -0
  100. package/dist/core/index.d.ts +17 -0
  101. package/dist/core/index.js +9 -0
  102. package/dist/core/loop.d.ts +113 -0
  103. package/dist/core/loop.js +185 -0
  104. package/dist/core/math.d.ts +58 -0
  105. package/dist/core/math.js +210 -0
  106. package/dist/core/noise.d.ts +40 -0
  107. package/dist/core/noise.js +247 -0
  108. package/dist/core/pool.d.ts +42 -0
  109. package/dist/core/pool.js +85 -0
  110. package/dist/core/random.d.ts +61 -0
  111. package/dist/core/random.js +199 -0
  112. package/dist/core/scene.d.ts +79 -0
  113. package/dist/core/scene.js +195 -0
  114. package/dist/core/timer.d.ts +66 -0
  115. package/dist/core/timer.js +286 -0
  116. package/dist/fx/billboard-wgsl.d.ts +29 -0
  117. package/dist/fx/billboard-wgsl.js +158 -0
  118. package/dist/fx/billboard.d.ts +249 -0
  119. package/dist/fx/billboard.js +702 -0
  120. package/dist/fx/debug-draw.d.ts +127 -0
  121. package/dist/fx/debug-draw.js +523 -0
  122. package/dist/fx/debug-wgsl.d.ts +7 -0
  123. package/dist/fx/debug-wgsl.js +32 -0
  124. package/dist/fx/decals-wgsl.d.ts +15 -0
  125. package/dist/fx/decals-wgsl.js +173 -0
  126. package/dist/fx/decals.d.ts +216 -0
  127. package/dist/fx/decals.js +607 -0
  128. package/dist/fx/effect.d.ts +129 -0
  129. package/dist/fx/effect.js +349 -0
  130. package/dist/fx/effects/hit-spark.json +48 -0
  131. package/dist/fx/effects/index.d.ts +8 -0
  132. package/dist/fx/effects/index.js +9 -0
  133. package/dist/fx/effects/magic-aura.json +47 -0
  134. package/dist/fx/effects/smoke-puff.json +34 -0
  135. package/dist/fx/emit-surface.d.ts +40 -0
  136. package/dist/fx/emit-surface.js +124 -0
  137. package/dist/fx/flicker.d.ts +30 -0
  138. package/dist/fx/flicker.js +42 -0
  139. package/dist/fx/index.d.ts +31 -0
  140. package/dist/fx/index.js +20 -0
  141. package/dist/fx/particles-wgsl.d.ts +57 -0
  142. package/dist/fx/particles-wgsl.js +828 -0
  143. package/dist/fx/particles.d.ts +566 -0
  144. package/dist/fx/particles.js +1533 -0
  145. package/dist/fx/random.d.ts +15 -0
  146. package/dist/fx/random.js +20 -0
  147. package/dist/fx/sky-wgsl.d.ts +23 -0
  148. package/dist/fx/sky-wgsl.js +127 -0
  149. package/dist/fx/sky.d.ts +96 -0
  150. package/dist/fx/sky.js +175 -0
  151. package/dist/fx/text-atlas.d.ts +143 -0
  152. package/dist/fx/text-atlas.js +327 -0
  153. package/dist/fx/trail-wgsl.d.ts +11 -0
  154. package/dist/fx/trail-wgsl.js +42 -0
  155. package/dist/fx/trail.d.ts +194 -0
  156. package/dist/fx/trail.js +555 -0
  157. package/dist/fx/water-wgsl.d.ts +34 -0
  158. package/dist/fx/water-wgsl.js +197 -0
  159. package/dist/fx/water.d.ts +176 -0
  160. package/dist/fx/water.js +371 -0
  161. package/dist/geom/collide/bvh.d.ts +151 -0
  162. package/dist/geom/collide/bvh.js +493 -0
  163. package/dist/geom/collide/debug.d.ts +14 -0
  164. package/dist/geom/collide/debug.js +74 -0
  165. package/dist/geom/collide/grid.d.ts +26 -0
  166. package/dist/geom/collide/grid.js +91 -0
  167. package/dist/geom/collide/index.d.ts +8 -0
  168. package/dist/geom/collide/index.js +8 -0
  169. package/dist/geom/collide/queries.d.ts +70 -0
  170. package/dist/geom/collide/queries.js +583 -0
  171. package/dist/geom/collide/serialize.d.ts +14 -0
  172. package/dist/geom/collide/serialize.js +145 -0
  173. package/dist/geom/collide/shapes.d.ts +161 -0
  174. package/dist/geom/collide/shapes.js +686 -0
  175. package/dist/geom/collide/slide.d.ts +66 -0
  176. package/dist/geom/collide/slide.js +375 -0
  177. package/dist/geom/collide/tile-slide.d.ts +88 -0
  178. package/dist/geom/collide/tile-slide.js +255 -0
  179. package/dist/geom/geometry.d.ts +95 -0
  180. package/dist/geom/geometry.js +322 -0
  181. package/dist/geom/heightfield.d.ts +72 -0
  182. package/dist/geom/heightfield.js +295 -0
  183. package/dist/geom/hull.d.ts +27 -0
  184. package/dist/geom/hull.js +279 -0
  185. package/dist/geom/index.d.ts +35 -0
  186. package/dist/geom/index.js +23 -0
  187. package/dist/geom/iso.d.ts +74 -0
  188. package/dist/geom/iso.js +89 -0
  189. package/dist/geom/lod.d.ts +29 -0
  190. package/dist/geom/lod.js +27 -0
  191. package/dist/geom/ops.d.ts +47 -0
  192. package/dist/geom/ops.js +285 -0
  193. package/dist/geom/primitives.d.ts +97 -0
  194. package/dist/geom/primitives.js +359 -0
  195. package/dist/geom/shapes.d.ts +43 -0
  196. package/dist/geom/shapes.js +88 -0
  197. package/dist/geom/simplify.d.ts +38 -0
  198. package/dist/geom/simplify.js +519 -0
  199. package/dist/geom/split.d.ts +37 -0
  200. package/dist/geom/split.js +413 -0
  201. package/dist/geom/sweep.d.ts +83 -0
  202. package/dist/geom/sweep.js +534 -0
  203. package/dist/geom/tangents.d.ts +16 -0
  204. package/dist/geom/tangents.js +124 -0
  205. package/dist/geom/triangulate.d.ts +19 -0
  206. package/dist/geom/triangulate.js +147 -0
  207. package/dist/host/default.d.ts +10 -0
  208. package/dist/host/default.js +10 -0
  209. package/dist/host/index.d.ts +4 -0
  210. package/dist/host/index.js +3 -0
  211. package/dist/host/types.d.ts +144 -0
  212. package/dist/host/types.js +1 -0
  213. package/dist/host/web-links.d.ts +38 -0
  214. package/dist/host/web-links.js +110 -0
  215. package/dist/host/web.d.ts +30 -0
  216. package/dist/host/web.js +216 -0
  217. package/dist/host/xr.d.ts +24 -0
  218. package/dist/host/xr.js +59 -0
  219. package/dist/i18n/i18n.d.ts +59 -0
  220. package/dist/i18n/i18n.js +241 -0
  221. package/dist/i18n/index.d.ts +3 -0
  222. package/dist/i18n/index.js +3 -0
  223. package/dist/i18n/message.d.ts +72 -0
  224. package/dist/i18n/message.js +369 -0
  225. package/dist/i18n/negotiate.d.ts +17 -0
  226. package/dist/i18n/negotiate.js +58 -0
  227. package/dist/index.d.ts +7 -0
  228. package/dist/index.js +1 -0
  229. package/dist/input/bindings.d.ts +31 -0
  230. package/dist/input/bindings.js +141 -0
  231. package/dist/input/clock.d.ts +44 -0
  232. package/dist/input/clock.js +49 -0
  233. package/dist/input/follow.d.ts +133 -0
  234. package/dist/input/follow.js +218 -0
  235. package/dist/input/gestures.d.ts +281 -0
  236. package/dist/input/gestures.js +662 -0
  237. package/dist/input/glyphs.d.ts +35 -0
  238. package/dist/input/glyphs.js +216 -0
  239. package/dist/input/gyro.d.ts +85 -0
  240. package/dist/input/gyro.js +140 -0
  241. package/dist/input/index.d.ts +19 -0
  242. package/dist/input/index.js +16 -0
  243. package/dist/input/input.d.ts +543 -0
  244. package/dist/input/input.js +1492 -0
  245. package/dist/input/look.d.ts +327 -0
  246. package/dist/input/look.js +681 -0
  247. package/dist/input/magnify.d.ts +177 -0
  248. package/dist/input/magnify.js +131 -0
  249. package/dist/input/pointer-dispatch.d.ts +138 -0
  250. package/dist/input/pointer-dispatch.js +180 -0
  251. package/dist/input/pointer-router.d.ts +204 -0
  252. package/dist/input/pointer-router.js +533 -0
  253. package/dist/input/pointer-sources.d.ts +164 -0
  254. package/dist/input/pointer-sources.js +306 -0
  255. package/dist/input/rays.d.ts +138 -0
  256. package/dist/input/rays.js +615 -0
  257. package/dist/input/record.d.ts +209 -0
  258. package/dist/input/record.js +601 -0
  259. package/dist/input/touch-zones.d.ts +147 -0
  260. package/dist/input/touch-zones.js +300 -0
  261. package/dist/input/types.d.ts +158 -0
  262. package/dist/input/types.js +1 -0
  263. package/dist/input/xr-source.d.ts +53 -0
  264. package/dist/input/xr-source.js +164 -0
  265. package/dist/nav/astar.d.ts +45 -0
  266. package/dist/nav/astar.js +182 -0
  267. package/dist/nav/corridor.d.ts +40 -0
  268. package/dist/nav/corridor.js +95 -0
  269. package/dist/nav/crowd.d.ts +94 -0
  270. package/dist/nav/crowd.js +624 -0
  271. package/dist/nav/flow.d.ts +61 -0
  272. package/dist/nav/flow.js +193 -0
  273. package/dist/nav/grid.d.ts +108 -0
  274. package/dist/nav/grid.js +210 -0
  275. package/dist/nav/heap.d.ts +22 -0
  276. package/dist/nav/heap.js +92 -0
  277. package/dist/nav/index.d.ts +37 -0
  278. package/dist/nav/index.js +19 -0
  279. package/dist/nav/mesh/areas.d.ts +44 -0
  280. package/dist/nav/mesh/areas.js +98 -0
  281. package/dist/nav/mesh/bake-options.d.ts +33 -0
  282. package/dist/nav/mesh/bake-options.js +76 -0
  283. package/dist/nav/mesh/contour.d.ts +22 -0
  284. package/dist/nav/mesh/contour.js +323 -0
  285. package/dist/nav/mesh/flow3.d.ts +35 -0
  286. package/dist/nav/mesh/flow3.js +229 -0
  287. package/dist/nav/mesh/links.d.ts +38 -0
  288. package/dist/nav/mesh/links.js +72 -0
  289. package/dist/nav/mesh/mesh-path.d.ts +152 -0
  290. package/dist/nav/mesh/mesh-path.js +643 -0
  291. package/dist/nav/mesh/mesh-reach.d.ts +78 -0
  292. package/dist/nav/mesh/mesh-reach.js +450 -0
  293. package/dist/nav/mesh/navmesh.d.ts +117 -0
  294. package/dist/nav/mesh/navmesh.js +647 -0
  295. package/dist/nav/mesh/polymesh.d.ts +24 -0
  296. package/dist/nav/mesh/polymesh.js +384 -0
  297. package/dist/nav/mesh/regions.d.ts +12 -0
  298. package/dist/nav/mesh/regions.js +367 -0
  299. package/dist/nav/mesh/serialize.d.ts +13 -0
  300. package/dist/nav/mesh/serialize.js +197 -0
  301. package/dist/nav/mesh/voxelize.d.ts +111 -0
  302. package/dist/nav/mesh/voxelize.js +552 -0
  303. package/dist/nav/obstacles.d.ts +75 -0
  304. package/dist/nav/obstacles.js +294 -0
  305. package/dist/nav/path.d.ts +59 -0
  306. package/dist/nav/path.js +177 -0
  307. package/dist/nav/query-queue.d.ts +46 -0
  308. package/dist/nav/query-queue.js +308 -0
  309. package/dist/nav/reach.d.ts +53 -0
  310. package/dist/nav/reach.js +148 -0
  311. package/dist/nav/steer.d.ts +36 -0
  312. package/dist/nav/steer.js +78 -0
  313. package/dist/platform/boot.d.ts +28 -0
  314. package/dist/platform/boot.js +43 -0
  315. package/dist/platform/device-mode.d.ts +40 -0
  316. package/dist/platform/device-mode.js +104 -0
  317. package/dist/platform/device.d.ts +31 -0
  318. package/dist/platform/device.js +91 -0
  319. package/dist/platform/environment.d.ts +42 -0
  320. package/dist/platform/environment.js +82 -0
  321. package/dist/platform/gpu.d.ts +40 -0
  322. package/dist/platform/gpu.js +57 -0
  323. package/dist/platform/index.d.ts +18 -0
  324. package/dist/platform/index.js +10 -0
  325. package/dist/platform/letterbox.d.ts +43 -0
  326. package/dist/platform/letterbox.js +57 -0
  327. package/dist/platform/links.d.ts +20 -0
  328. package/dist/platform/links.js +43 -0
  329. package/dist/platform/screens.d.ts +36 -0
  330. package/dist/platform/screens.js +138 -0
  331. package/dist/platform/surface.d.ts +72 -0
  332. package/dist/platform/surface.js +157 -0
  333. package/dist/platform/xr-fake.d.ts +168 -0
  334. package/dist/platform/xr-fake.js +434 -0
  335. package/dist/platform/xr-surface.d.ts +120 -0
  336. package/dist/platform/xr-surface.js +214 -0
  337. package/dist/platform/xr-types.d.ts +262 -0
  338. package/dist/post/ao.d.ts +12 -0
  339. package/dist/post/ao.js +136 -0
  340. package/dist/post/blend.d.ts +27 -0
  341. package/dist/post/blend.js +129 -0
  342. package/dist/post/depth-pass.d.ts +43 -0
  343. package/dist/post/depth-pass.js +118 -0
  344. package/dist/post/dof.d.ts +1 -0
  345. package/dist/post/dof.js +66 -0
  346. package/dist/post/exposure.d.ts +80 -0
  347. package/dist/post/exposure.js +322 -0
  348. package/dist/post/index.d.ts +12 -0
  349. package/dist/post/index.js +11 -0
  350. package/dist/post/lens-dirt.d.ts +13 -0
  351. package/dist/post/lens-dirt.js +91 -0
  352. package/dist/post/lut.d.ts +19 -0
  353. package/dist/post/lut.js +50 -0
  354. package/dist/post/motion-blur.d.ts +9 -0
  355. package/dist/post/motion-blur.js +78 -0
  356. package/dist/post/post-stack.d.ts +302 -0
  357. package/dist/post/post-stack.js +1137 -0
  358. package/dist/post/settings.d.ts +485 -0
  359. package/dist/post/settings.js +416 -0
  360. package/dist/post/shaders.d.ts +25 -0
  361. package/dist/post/shaders.js +410 -0
  362. package/dist/post/ssr.d.ts +16 -0
  363. package/dist/post/ssr.js +155 -0
  364. package/dist/post/taa.d.ts +74 -0
  365. package/dist/post/taa.js +235 -0
  366. package/dist/post/white-balance.d.ts +25 -0
  367. package/dist/post/white-balance.js +98 -0
  368. package/dist/render/bindings.d.ts +98 -0
  369. package/dist/render/bindings.js +281 -0
  370. package/dist/render/blend.d.ts +13 -0
  371. package/dist/render/blend.js +26 -0
  372. package/dist/render/camera-2d.d.ts +72 -0
  373. package/dist/render/camera-2d.js +92 -0
  374. package/dist/render/camera.d.ts +302 -0
  375. package/dist/render/camera.js +671 -0
  376. package/dist/render/color.d.ts +16 -0
  377. package/dist/render/color.js +41 -0
  378. package/dist/render/compressed.d.ts +104 -0
  379. package/dist/render/compressed.js +248 -0
  380. package/dist/render/diagnostics.d.ts +15 -0
  381. package/dist/render/diagnostics.js +43 -0
  382. package/dist/render/dynamic-resolution.d.ts +70 -0
  383. package/dist/render/dynamic-resolution.js +126 -0
  384. package/dist/render/fake-gpu.d.ts +204 -0
  385. package/dist/render/fake-gpu.js +426 -0
  386. package/dist/render/flipbook.d.ts +56 -0
  387. package/dist/render/flipbook.js +87 -0
  388. package/dist/render/frame.d.ts +278 -0
  389. package/dist/render/frame.js +174 -0
  390. package/dist/render/fullscreen.d.ts +54 -0
  391. package/dist/render/fullscreen.js +91 -0
  392. package/dist/render/gpu-timer.d.ts +73 -0
  393. package/dist/render/gpu-timer.js +186 -0
  394. package/dist/render/index.d.ts +53 -0
  395. package/dist/render/index.js +29 -0
  396. package/dist/render/instance-list.d.ts +185 -0
  397. package/dist/render/instance-list.js +547 -0
  398. package/dist/render/lights.d.ts +181 -0
  399. package/dist/render/lights.js +233 -0
  400. package/dist/render/lod.d.ts +54 -0
  401. package/dist/render/lod.js +52 -0
  402. package/dist/render/material.d.ts +165 -0
  403. package/dist/render/material.js +292 -0
  404. package/dist/render/mesh.d.ts +284 -0
  405. package/dist/render/mesh.js +472 -0
  406. package/dist/render/mipmap.d.ts +16 -0
  407. package/dist/render/mipmap.js +121 -0
  408. package/dist/render/parallax.d.ts +50 -0
  409. package/dist/render/parallax.js +47 -0
  410. package/dist/render/pbr-wgsl.d.ts +31 -0
  411. package/dist/render/pbr-wgsl.js +119 -0
  412. package/dist/render/ping-pong.d.ts +42 -0
  413. package/dist/render/ping-pong.js +74 -0
  414. package/dist/render/renderer.d.ts +741 -0
  415. package/dist/render/renderer.js +2486 -0
  416. package/dist/render/scene-pipelines.d.ts +44 -0
  417. package/dist/render/scene-pipelines.js +92 -0
  418. package/dist/render/scene-target.d.ts +170 -0
  419. package/dist/render/scene-target.js +450 -0
  420. package/dist/render/shadow.d.ts +74 -0
  421. package/dist/render/shadow.js +208 -0
  422. package/dist/render/skin.d.ts +112 -0
  423. package/dist/render/skin.js +240 -0
  424. package/dist/render/snapshot.d.ts +36 -0
  425. package/dist/render/snapshot.js +34 -0
  426. package/dist/render/standard.d.ts +162 -0
  427. package/dist/render/standard.js +263 -0
  428. package/dist/render/texture.d.ts +142 -0
  429. package/dist/render/texture.js +228 -0
  430. package/dist/render/tile-layer.d.ts +110 -0
  431. package/dist/render/tile-layer.js +304 -0
  432. package/dist/render/transform.d.ts +115 -0
  433. package/dist/render/transform.js +318 -0
  434. package/dist/render/wgsl.d.ts +131 -0
  435. package/dist/render/wgsl.js +528 -0
  436. package/dist/save/codec.d.ts +49 -0
  437. package/dist/save/codec.js +169 -0
  438. package/dist/save/index.d.ts +8 -0
  439. package/dist/save/index.js +8 -0
  440. package/dist/save/journal.d.ts +24 -0
  441. package/dist/save/journal.js +102 -0
  442. package/dist/save/migrate.d.ts +15 -0
  443. package/dist/save/migrate.js +37 -0
  444. package/dist/save/schema.d.ts +72 -0
  445. package/dist/save/schema.js +154 -0
  446. package/dist/save/settings.d.ts +28 -0
  447. package/dist/save/settings.js +59 -0
  448. package/dist/save/slots.d.ts +56 -0
  449. package/dist/save/slots.js +200 -0
  450. package/dist/save/storage.d.ts +35 -0
  451. package/dist/save/storage.js +62 -0
  452. package/dist/save/store.d.ts +114 -0
  453. package/dist/save/store.js +269 -0
  454. package/dist/testing/fake-host.d.ts +103 -0
  455. package/dist/testing/fake-host.js +163 -0
  456. package/dist/testing/fixed-clock.d.ts +25 -0
  457. package/dist/testing/fixed-clock.js +30 -0
  458. package/dist/testing/index.d.ts +4 -0
  459. package/dist/testing/index.js +5 -0
  460. package/dist/testing/test-game.d.ts +76 -0
  461. package/dist/testing/test-game.js +92 -0
  462. package/dist/tween/ease.d.ts +77 -0
  463. package/dist/tween/ease.js +192 -0
  464. package/dist/tween/index.d.ts +8 -0
  465. package/dist/tween/index.js +7 -0
  466. package/dist/tween/timeline.d.ts +78 -0
  467. package/dist/tween/timeline.js +269 -0
  468. package/dist/tween/tween.d.ts +168 -0
  469. package/dist/tween/tween.js +320 -0
  470. package/dist/ui/anchor.d.ts +206 -0
  471. package/dist/ui/anchor.js +307 -0
  472. package/dist/ui/caption.d.ts +122 -0
  473. package/dist/ui/caption.js +286 -0
  474. package/dist/ui/cursor.d.ts +105 -0
  475. package/dist/ui/cursor.js +261 -0
  476. package/dist/ui/dom.d.ts +30 -0
  477. package/dist/ui/dom.js +92 -0
  478. package/dist/ui/floats.d.ts +86 -0
  479. package/dist/ui/floats.js +260 -0
  480. package/dist/ui/hud.d.ts +198 -0
  481. package/dist/ui/hud.js +431 -0
  482. package/dist/ui/index.d.ts +37 -0
  483. package/dist/ui/index.js +34 -0
  484. package/dist/ui/inventory-card.d.ts +52 -0
  485. package/dist/ui/inventory-card.js +173 -0
  486. package/dist/ui/inventory-context.d.ts +29 -0
  487. package/dist/ui/inventory-context.js +125 -0
  488. package/dist/ui/inventory-drag.d.ts +63 -0
  489. package/dist/ui/inventory-drag.js +394 -0
  490. package/dist/ui/inventory-grid.d.ts +66 -0
  491. package/dist/ui/inventory-grid.js +625 -0
  492. package/dist/ui/inventory-radial.d.ts +39 -0
  493. package/dist/ui/inventory-radial.js +168 -0
  494. package/dist/ui/inventory.d.ts +128 -0
  495. package/dist/ui/inventory.js +154 -0
  496. package/dist/ui/layout.d.ts +356 -0
  497. package/dist/ui/layout.js +856 -0
  498. package/dist/ui/link.d.ts +64 -0
  499. package/dist/ui/link.js +155 -0
  500. package/dist/ui/loading.d.ts +40 -0
  501. package/dist/ui/loading.js +157 -0
  502. package/dist/ui/loupe.d.ts +74 -0
  503. package/dist/ui/loupe.js +164 -0
  504. package/dist/ui/menu-nav.d.ts +33 -0
  505. package/dist/ui/menu-nav.js +28 -0
  506. package/dist/ui/minimap-canvas.d.ts +145 -0
  507. package/dist/ui/minimap-canvas.js +460 -0
  508. package/dist/ui/notify.d.ts +40 -0
  509. package/dist/ui/notify.js +141 -0
  510. package/dist/ui/orb.d.ts +53 -0
  511. package/dist/ui/orb.js +304 -0
  512. package/dist/ui/overlay.d.ts +213 -0
  513. package/dist/ui/overlay.js +394 -0
  514. package/dist/ui/padnav.d.ts +53 -0
  515. package/dist/ui/padnav.js +146 -0
  516. package/dist/ui/perf.d.ts +130 -0
  517. package/dist/ui/perf.js +329 -0
  518. package/dist/ui/rotate-card.d.ts +54 -0
  519. package/dist/ui/rotate-card.js +97 -0
  520. package/dist/ui/stack.d.ts +128 -0
  521. package/dist/ui/stack.js +312 -0
  522. package/dist/ui/styles.d.ts +13 -0
  523. package/dist/ui/styles.js +200 -0
  524. package/dist/ui/text-scale.d.ts +67 -0
  525. package/dist/ui/text-scale.js +102 -0
  526. package/dist/ui/theme.d.ts +70 -0
  527. package/dist/ui/theme.js +98 -0
  528. package/dist/ui/toast.d.ts +23 -0
  529. package/dist/ui/toast.js +46 -0
  530. package/dist/ui/tooltip.d.ts +89 -0
  531. package/dist/ui/tooltip.js +333 -0
  532. package/dist/ui/widgets-2.d.ts +134 -0
  533. package/dist/ui/widgets-2.js +399 -0
  534. package/dist/ui/widgets-3.d.ts +91 -0
  535. package/dist/ui/widgets-3.js +212 -0
  536. package/dist/ui/widgets.d.ts +34 -0
  537. package/dist/ui/widgets.js +50 -0
  538. package/dist/ui/world-panel/index.d.ts +5 -0
  539. package/dist/ui/world-panel/index.js +5 -0
  540. package/dist/ui/world-panel/layout.d.ts +38 -0
  541. package/dist/ui/world-panel/layout.js +68 -0
  542. package/dist/ui/world-panel/paint.d.ts +96 -0
  543. package/dist/ui/world-panel/paint.js +136 -0
  544. package/dist/ui/world-panel/panel.d.ts +235 -0
  545. package/dist/ui/world-panel/panel.js +762 -0
  546. package/dist/ui/world-panel/wgsl.d.ts +10 -0
  547. package/dist/ui/world-panel/wgsl.js +52 -0
  548. package/dist/ui/world-panel/widgets.d.ts +207 -0
  549. package/dist/ui/world-panel/widgets.js +569 -0
  550. package/dist/voxel/chunks.d.ts +77 -0
  551. package/dist/voxel/chunks.js +149 -0
  552. package/dist/voxel/grid.d.ts +84 -0
  553. package/dist/voxel/grid.js +223 -0
  554. package/dist/voxel/index.d.ts +22 -0
  555. package/dist/voxel/index.js +7 -0
  556. package/dist/voxel/mesher-worker.d.ts +14 -0
  557. package/dist/voxel/mesher-worker.js +47 -0
  558. package/dist/voxel/mesher.d.ts +73 -0
  559. package/dist/voxel/mesher.js +306 -0
  560. package/dist/voxel/ray.d.ts +32 -0
  561. package/dist/voxel/ray.js +73 -0
  562. package/dist/voxel/wgsl.d.ts +16 -0
  563. package/dist/voxel/wgsl.js +28 -0
  564. package/dist/voxel/worker-client.d.ts +79 -0
  565. package/dist/voxel/worker-client.js +122 -0
  566. package/package.json +177 -3
@@ -0,0 +1,123 @@
1
+ /**
2
+ * The asset cache: one place that knows what a game has loaded and what it costs. Entries are
3
+ * keyed (a uri, usually), loaded once however many callers ask at the same time, refcounted,
4
+ * and sized by the caller (`size(value)`: bytes of GPU memory, of decoded data, whatever the
5
+ * budget counts). Once the total passes `budgetBytes`, unreferenced, unpinned entries go,
6
+ * least recently used first, through `onEvict` so the game frees what the value holds
7
+ * (`scene.destroy()`, `texture.destroy()`).
8
+ *
9
+ * The cache never fetches: `load` is the caller's, typically over the bundle's `read`
10
+ * (`() => read(uri).then(decode)`).
11
+ */
12
+ /** Make an asset cache (`AssetCache`); see the module comment. */
13
+ export function createAssetCache(opts) {
14
+ if (!(opts.budgetBytes >= 0))
15
+ throw new Error(`asset cache: budgetBytes ${opts.budgetBytes} must be >= 0`);
16
+ // Map order is recency: a touched entry is moved to the end, eviction walks from the start.
17
+ const entries = new Map();
18
+ let bytes = 0;
19
+ let hits = 0;
20
+ let misses = 0;
21
+ let evictions = 0;
22
+ const touch = (key, e) => {
23
+ entries.delete(key);
24
+ entries.set(key, e);
25
+ };
26
+ const remove = (key, e) => {
27
+ entries.delete(key);
28
+ bytes -= e.size;
29
+ opts.onEvict?.(key, e.value);
30
+ };
31
+ const trim = () => {
32
+ if (bytes <= opts.budgetBytes)
33
+ return;
34
+ for (const [key, e] of entries) {
35
+ if (bytes <= opts.budgetBytes)
36
+ break;
37
+ if (e.refs > 0 || e.pinned || !e.loaded)
38
+ continue;
39
+ evictions++;
40
+ remove(key, e);
41
+ }
42
+ };
43
+ const entry = (key, op) => {
44
+ const e = entries.get(key);
45
+ if (!e)
46
+ throw new Error(`asset cache: ${op}("${key}"): key not in the cache`);
47
+ return e;
48
+ };
49
+ return {
50
+ acquire(key, load, size) {
51
+ const found = entries.get(key);
52
+ if (found) {
53
+ hits++;
54
+ found.refs++;
55
+ touch(key, found);
56
+ return found.promise;
57
+ }
58
+ misses++;
59
+ const e = {
60
+ promise: undefined,
61
+ value: undefined,
62
+ loaded: false,
63
+ size: 0,
64
+ refs: 1,
65
+ pinned: false,
66
+ };
67
+ e.promise = Promise.resolve()
68
+ .then(load)
69
+ .then((value) => {
70
+ e.value = value;
71
+ e.size = Math.max(0, size(value));
72
+ e.loaded = true;
73
+ if (entries.get(key) === e) {
74
+ bytes += e.size;
75
+ trim();
76
+ }
77
+ return value;
78
+ }, (err) => {
79
+ if (entries.get(key) === e)
80
+ entries.delete(key);
81
+ throw err;
82
+ });
83
+ entries.set(key, e);
84
+ return e.promise;
85
+ },
86
+ release(key) {
87
+ const e = entry(key, 'release');
88
+ if (e.refs === 0)
89
+ throw new Error(`asset cache: release("${key}"): no reference held`);
90
+ e.refs--;
91
+ if (e.refs === 0) {
92
+ touch(key, e);
93
+ trim();
94
+ }
95
+ },
96
+ pin(key) {
97
+ entry(key, 'pin').pinned = true;
98
+ },
99
+ unpin(key) {
100
+ entry(key, 'unpin').pinned = false;
101
+ trim();
102
+ },
103
+ has(key) {
104
+ return entries.has(key);
105
+ },
106
+ refs(key) {
107
+ return entries.get(key)?.refs ?? 0;
108
+ },
109
+ dispose(key) {
110
+ const e = entries.get(key);
111
+ if (!e?.loaded)
112
+ return false;
113
+ if (e.refs > 0) {
114
+ throw new Error(`asset cache: dispose("${key}"): ${e.refs} reference(s) still held`);
115
+ }
116
+ remove(key, e);
117
+ return true;
118
+ },
119
+ get stats() {
120
+ return { bytes, entries: entries.size, hits, misses, evictions };
121
+ },
122
+ };
123
+ }
@@ -0,0 +1,252 @@
1
+ /**
2
+ * `loadGltf`: a parsed `GltfDocument` → engine meshes (`VERTEX_LAYOUT_3D`, the tangent layout
3
+ * for primitives with `TANGENT`, the skinned layout for skinned ones when a palette is given),
4
+ * one `Transform` per node, one `Texture` per (image, colour space) a material reads, one
5
+ * standard PBR `Material` per glTF material (every map, factor, sampler, alpha mode and
6
+ * `KHR_texture_transform` carried over; `opts.lit: 'lit'` keeps the older base-colour-only
7
+ * material), and a `GltfScene` whose `draw(frame)` pushes one instance per (node, primitive)
8
+ * with no allocation. Images decode through `createImageBitmap` (or `opts.decodeImage`);
9
+ * external URIs come from `opts.resources`, fetched by the game. The engine fetches nothing.
10
+ *
11
+ * Morph targets: a mesh with targets keeps its primitives' base vertex buffers on the CPU and
12
+ * blends them through `anim`'s `createMorphBlender` into a second buffer `draw` uploads with
13
+ * `Mesh.update` when `scene.morph(node).apply()` reported a change. Meshes without targets keep
14
+ * nothing on the CPU.
15
+ *
16
+ * Lights and cameras: `scene.lights` holds the file's `KHR_lights_punctual` lights as the
17
+ * render module's `SunLight` / `PointLight` / `SpotLight` records (push them into
18
+ * `frame.lights`); `scene.cameras` the file's cameras, which `applyGltfCamera` sets on a
19
+ * `Camera`. Material variants (`KHR_materials_variants`): every material is created at load;
20
+ * `scene.setVariant(name)` swaps the material of each mapped draw in place.
21
+ */
22
+ import { type MorphBlender } from '../anim/morph.js';
23
+ import type { Camera } from '../render/camera.js';
24
+ import type { Frame, InstanceParams } from '../render/frame.js';
25
+ import type { PointLight, SpotLight, SunLight } from '../render/lights.js';
26
+ import type { Material } from '../render/material.js';
27
+ import { Mesh, type MeshUpdate } from '../render/mesh.js';
28
+ import type { Renderer } from '../render/renderer.js';
29
+ import type { SkinPalette } from '../render/skin.js';
30
+ import type { SamplerKind, Texture } from '../render/texture.js';
31
+ import { Transform } from '../render/transform.js';
32
+ import { type GltfAnimation, type GltfCamera, type GltfDocument, type GltfPrimitive, type GltfSampler, type GltfSkin, type GltfVariantMapping } from './gltf.js';
33
+ /** Which material the loader builds per glTF material. */
34
+ export type GltfLitMode = 'standard' | 'lit';
35
+ /** A decoded image the loader can upload: an `ImageBitmap` or anything `copyExternalImageToTexture` takes. */
36
+ export type GltfImageSource = ImageBitmap | HTMLCanvasElement | OffscreenCanvas;
37
+ export interface LoadGltfOptions {
38
+ /**
39
+ * External resources by the URI the file names (`GltfDocument.externalUris`): encoded image
40
+ * bytes, or an already decoded image. A URI the document needs and this lacks throws.
41
+ */
42
+ resources?: Record<string, ArrayBuffer | GltfImageSource>;
43
+ /**
44
+ * Draw every primitive with this material instead of the built-in ones. The scene's
45
+ * textures are still created (`scene.textures`) for the game to bind as it likes; `lit`
46
+ * and `palette` only pick the mesh layouts.
47
+ */
48
+ material?: Material;
49
+ /**
50
+ * `'standard'` (default): one `createStandardMaterial` per glTF material with every map,
51
+ * factor, sampler, alpha mode and texture transform the file gives (`scene.materials[i]`
52
+ * for `doc.materials[i]`, `scene.materialNames[i]` its name). `'lit'`: the older
53
+ * base-colour-only `GLTF_LIT_WGSL` material (base colour factor as `tint`, mask cutoff as
54
+ * `params.x`).
55
+ */
56
+ lit?: GltfLitMode;
57
+ /**
58
+ * Skinned primitives (`JOINTS_0`) become `VERTEX_LAYOUT_SKINNED` meshes bound to this
59
+ * palette: the standard materials are created with `skin: palette`, and a skinned draw's
60
+ * `params.params[3]` picks its palette slot (`SKIN_PARAM`). Without one, skinned primitives
61
+ * are built in the 3D layout at their bind pose (their joints and weights stay on the
62
+ * document); a material cannot take a palette later, so give it here.
63
+ */
64
+ palette?: SkinPalette;
65
+ /** Label prefix for GPU objects (default `'gltf'`). */
66
+ label?: string;
67
+ /** Build mip chains for the textures (default true; `generateMipmaps` on the GPU). */
68
+ mips?: boolean;
69
+ /**
70
+ * How encoded image bytes become an image (default: `createImageBitmap` on a `Blob`). Tests
71
+ * and Workers without image decoding pass their own.
72
+ */
73
+ decodeImage?: (bytes: Uint8Array, mimeType: string | null) => Promise<GltfImageSource>;
74
+ /**
75
+ * Multiplies glTF light intensity on its way into `scene.lights` (default 1). The engine's
76
+ * light colours are unitless linear RGB; a file's candela (point, spot) and lux
77
+ * (directional) usually want a scale well below 1.
78
+ */
79
+ lightScale?: number;
80
+ }
81
+ /**
82
+ * The file's `KHR_lights_punctual` lights as the render module's records, in scene order
83
+ * (`GltfDocument.lights` keeps glTF's units). `color` is glTF `color × intensity × lightScale`;
84
+ * `radius` is `range`, or `16·√(intensity × lightScale)` without one (where an inverse-square
85
+ * light has fallen to 1/256); spot `innerAngle` / `outerAngle` are the cone half-angles.
86
+ * A directional light is a `SunLight` (ws/assets-4): `direction` is the node's world -Z,
87
+ * normalised, the way the light travels (the engine's convention, as `SpotLight.direction`),
88
+ * and the deprecated `dir` reads and replaces the same array. Push the points and spots into
89
+ * `frame.lights.points` / `.spots`, or copy a sun's `direction` and `color` into
90
+ * `frame.lights.sun`.
91
+ */
92
+ export interface GltfSceneLights {
93
+ directional: SunLight[];
94
+ points: PointLight[];
95
+ spots: SpotLight[];
96
+ }
97
+ /** One draw of the scene: a primitive's mesh placed by its node's transform. */
98
+ export interface GltfSceneNode {
99
+ /** Index into `GltfDocument.nodes` / `GltfScene.transforms`. */
100
+ node: number;
101
+ transform: Transform;
102
+ mesh: Mesh;
103
+ material: Material;
104
+ /**
105
+ * Mutate to recolour the draw. `lit: 'standard'`: `tint` white, `params` zero (the factors
106
+ * live in the material); a skinned draw sets `params[3]` to its palette slot. `lit: 'lit'`:
107
+ * base colour factor as `tint`, alpha cutoff as `params.x`.
108
+ */
109
+ params: InstanceParams;
110
+ /** The node's skin (index into `GltfScene.skins`), or null for a static draw. */
111
+ skin: number | null;
112
+ /**
113
+ * The glTF material the draw uses (index into `GltfDocument.materials` and
114
+ * `GltfScene.materials`), or null for the default; `setVariant` changes it.
115
+ */
116
+ materialIndex: number | null;
117
+ }
118
+ /** One draw whose primitive has `KHR_materials_variants` mappings. */
119
+ interface VariantDraw {
120
+ draw: GltfSceneNode;
121
+ /** The primitive's own material (no variant, or a variant no mapping names). */
122
+ base: number | null;
123
+ mappings: readonly GltfVariantMapping[];
124
+ }
125
+ /**
126
+ * The morph state of one glTF mesh (shared by every node drawing it): one `weights` array for
127
+ * all its primitives, blended by one `MorphBlender` per primitive. Write `weights` (by hand or
128
+ * with `anim`'s `sampleWeights`), call `apply()`; the scene uploads changed primitives on its
129
+ * next `draw`.
130
+ */
131
+ export interface GltfMorph {
132
+ /** Index into `GltfDocument.meshes`. */
133
+ readonly mesh: number;
134
+ /** One weight per target, starting at the file's `mesh.weights` (or zeros). */
135
+ readonly weights: Float32Array;
136
+ readonly targetCount: number;
137
+ /** One per primitive of the mesh, all reading `weights`. */
138
+ readonly blenders: readonly MorphBlender[];
139
+ /** Blend every primitive; true when any vertex buffer changed (and so will be uploaded). */
140
+ apply(): boolean;
141
+ }
142
+ /** One morphed primitive: its blender, the buffer it writes and the mesh that uploads it. */
143
+ interface MorphEntry {
144
+ blender: MorphBlender;
145
+ mesh: Mesh;
146
+ update: MeshUpdate;
147
+ dirty: boolean;
148
+ }
149
+ /**
150
+ * Built-in material: base colour texture × factor × vertex colour, lit by the engine's lighting
151
+ * block (`engine_lambert`) plus a faint sky term from above. `params.x` > 0 is a `MASK` cutoff.
152
+ */
153
+ export declare const GLTF_LIT_WGSL = "\n@group(1) @binding(1) var baseSampler: sampler;\n@group(1) @binding(2) var baseTex: texture_2d<f32>;\n\n@fragment fn fs_main(in: VSOut) -> FragOut {\n let c = textureSample(baseTex, baseSampler, in.uv) * in.color;\n if (in.params.x > 0.0 && c.a < in.params.x) { discard; }\n let n = normalize(in.normal);\n let sky = 0.5 + 0.5 * n.y;\n var o: FragOut;\n o.color = vec4f(c.rgb * (engine_lambert(n, in.worldPos) + 0.12 * sky), c.a);\n o.emissive = vec4f(0.0);\n return o;\n}\n";
154
+ /** The GPU side of one glTF document. Owns what it created; `destroy()` frees it. */
155
+ export declare class GltfScene {
156
+ /** One per primitive, in document order (mesh 0's primitives, then mesh 1's, …). */
157
+ readonly meshes: Mesh[];
158
+ /**
159
+ * One per (image, colour space) a material reads, in first-use order: base colour and
160
+ * emissive maps are sRGB, the rest linear, so an image used both ways is uploaded twice.
161
+ */
162
+ readonly textures: Texture[];
163
+ /** One per glTF material, built by the loader (empty when `opts.material` was given). */
164
+ readonly materials: Material[];
165
+ /** The file's `material.name` per glTF material (null when unnamed). */
166
+ readonly materialNames: (string | null)[];
167
+ /** The palette skinned meshes are bound to (`opts.palette`), or null. */
168
+ readonly palette: SkinPalette | null;
169
+ /** One per document node, parented like the file (`doc.nodes[i]` → `transforms[i]`). */
170
+ readonly transforms: Transform[];
171
+ /** Every draw: one per (node in the default scene, primitive of its mesh). */
172
+ readonly nodes: GltfSceneNode[];
173
+ /** World-space bounds of the default scene (from the document). */
174
+ readonly bounds: {
175
+ center: [number, number, number];
176
+ radius: number;
177
+ };
178
+ /** The document's skins (`skeletonFromSkin(doc, i)` builds the animation module's skeleton). */
179
+ readonly skins: readonly GltfSkin[];
180
+ /** The document's clips, in the animation module's `AnimationClip` shape. */
181
+ readonly animations: readonly GltfAnimation[];
182
+ /** One per mesh that carries morph targets, in mesh order. */
183
+ readonly morphs: readonly GltfMorph[];
184
+ /** The file's lights as render records (`GltfSceneLights`; empty lists when it has none). */
185
+ readonly lights: GltfSceneLights;
186
+ /** The file's cameras placed by their nodes (`applyGltfCamera` sets one on a `Camera`). */
187
+ readonly cameras: readonly GltfCamera[];
188
+ /** The file's `KHR_materials_variants` names (`setVariant` takes one). */
189
+ readonly variants: readonly string[];
190
+ /** Whether the default material or textures were created here (and so destroyed here). */
191
+ private readonly ownsMaterials;
192
+ private readonly morphByMesh;
193
+ private readonly morphEntries;
194
+ private readonly doc;
195
+ private readonly variantDraws;
196
+ private resolveMaterial;
197
+ private litParams;
198
+ private activeVariant;
199
+ constructor(doc: GltfDocument, ownsMaterials: boolean, palette?: SkinPalette | null);
200
+ /** The active material variant, or null for each primitive's own material. */
201
+ get variant(): string | null;
202
+ /**
203
+ * Switch every draw with `KHR_materials_variants` mappings to the material `name` binds (a
204
+ * draw no mapping of `name` covers goes back to its own material); null restores every
205
+ * draw's own material. Swaps `material` (and `materialIndex`) in place: no material is
206
+ * created. Throws `GltfError` listing the file's variants for an unknown name.
207
+ */
208
+ setVariant(name: string | null): this;
209
+ /** @internal The loader: how `setVariant` finds a material, and which draws it touches. */
210
+ bindVariants(resolve: ((index: number | null) => Material) | null, litParams: boolean, draws: VariantDraw[]): void;
211
+ /**
212
+ * The morph state of the mesh `nodeIndex` (into `GltfDocument.nodes`) draws, or null when the
213
+ * node has no mesh or the mesh no targets. Nodes sharing a mesh share the object.
214
+ */
215
+ morph(nodeIndex: number): GltfMorph | null;
216
+ /** @internal Register a mesh's morph state (the loader). */
217
+ addMorph(morph: GltfMorph, entries: MorphEntry[]): void;
218
+ /**
219
+ * Upload every morphed primitive whose `apply()` changed it, then record every draw into
220
+ * `frame`. Allocation-free.
221
+ */
222
+ draw(frame: Frame): void;
223
+ destroy(): void;
224
+ }
225
+ /**
226
+ * Upload a document to the GPU. Resolves once every image is decoded; everything else is
227
+ * synchronous. Throws `GltfError` for a missing external resource or an undecodable image.
228
+ */
229
+ export declare function loadGltf(renderer: Renderer, doc: GltfDocument, opts?: LoadGltfOptions): Promise<GltfScene>;
230
+ /**
231
+ * Set `camera` to a glTF camera: its projection (perspective `yfov`, the file's `aspectRatio`
232
+ * or `aspect`, `znear`, `zfar` or an infinite far plane; orthographic `xmag` / `ymag` half
233
+ * extents and its depth range) and its node's view (`GltfCamera.view`). Turns depth test,
234
+ * depth write and culling on. Allocation-free; returns `camera`.
235
+ */
236
+ export declare function applyGltfCamera(camera: Camera, c: GltfCamera, aspect: number): Camera;
237
+ /**
238
+ * The engine sampler nearest a glTF one: nearest magnification → `nearest-mip-clamp` (or
239
+ * `nearest-clamp` without mips; the engine has no nearest-repeat), linear → `linear-clamp`
240
+ * when both wraps clamp, else `linear-mip-repeat` (`linear-repeat` without mips; mirrored
241
+ * repeat is treated as repeat). `mips` false, or a glTF `minFilter` without a mipmap mode,
242
+ * picks the level-0 sampler.
243
+ */
244
+ export declare function gltfSamplerKind(sampler: GltfSampler, mips: boolean): SamplerKind;
245
+ /** `x, y, z, nx, ny, nz, u, v, r, g, b, a` per vertex (the `VERTEX_LAYOUT_3D` float order). */
246
+ export declare function interleave3d(p: GltfPrimitive): Float32Array;
247
+ /**
248
+ * `VERTEX_LAYOUT_3D_TANGENT`: the 12 floats of `interleave3d` then `tangent.xyzw` per vertex.
249
+ * A primitive without `TANGENT` gets `(1, 0, 0, 1)`.
250
+ */
251
+ export declare function interleave3dTangent(p: GltfPrimitive): Float32Array;
252
+ export {};