murow 0.0.70 → 0.0.71

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 (439) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * TypeGPU struct definitions for the 2D and 3D renderers.
3
+ * These define the GPU-side data layout — used by shaders and bind group layouts.
4
+ *
5
+ * All fields are f32 to guarantee contiguous layout matching our flat Float32Arrays.
6
+ * No vec2f/vec4f here — that would introduce alignment padding.
7
+ */
8
+ import * as d from 'typegpu/data';
9
+ export declare const DynamicSprite: d.WgslStruct<{
10
+ prevX: d.F32;
11
+ prevY: d.F32;
12
+ currX: d.F32;
13
+ currY: d.F32;
14
+ prevRotation: d.F32;
15
+ currRotation: d.F32;
16
+ }>;
17
+ export declare const StaticSprite: d.WgslStruct<{
18
+ scaleX: d.F32;
19
+ scaleY: d.F32;
20
+ uvMinX: d.F32;
21
+ uvMinY: d.F32;
22
+ uvMaxX: d.F32;
23
+ uvMaxY: d.F32;
24
+ layer: d.F32;
25
+ flipX: d.F32;
26
+ flipY: d.F32;
27
+ opacity: d.F32;
28
+ tintR: d.F32;
29
+ tintG: d.F32;
30
+ tintB: d.F32;
31
+ tintA: d.F32;
32
+ }>;
33
+ export declare const SpriteUniforms: d.WgslStruct<{
34
+ viewProjection: d.Mat3x3f;
35
+ alpha: d.F32;
36
+ resolution: d.Vec2f;
37
+ }>;
38
+ export declare const DynamicInstance3D: d.WgslStruct<{
39
+ prevPosX: d.F32;
40
+ prevPosY: d.F32;
41
+ prevPosZ: d.F32;
42
+ currPosX: d.F32;
43
+ currPosY: d.F32;
44
+ currPosZ: d.F32;
45
+ prevRotX: d.F32;
46
+ prevRotY: d.F32;
47
+ prevRotZ: d.F32;
48
+ prevRotW: d.F32;
49
+ currRotX: d.F32;
50
+ currRotY: d.F32;
51
+ currRotZ: d.F32;
52
+ currRotW: d.F32;
53
+ }>;
54
+ export declare const StaticInstance3D: d.WgslStruct<{
55
+ scaleX: d.F32;
56
+ scaleY: d.F32;
57
+ scaleZ: d.F32;
58
+ materialId: d.F32;
59
+ opacity: d.F32;
60
+ tintR: d.F32;
61
+ tintG: d.F32;
62
+ tintB: d.F32;
63
+ tintA: d.F32;
64
+ custom0: d.F32;
65
+ custom1: d.F32;
66
+ }>;
67
+ export declare const DynamicMesh: d.WgslStruct<{
68
+ prevPosX: d.F32;
69
+ prevPosY: d.F32;
70
+ prevPosZ: d.F32;
71
+ currPosX: d.F32;
72
+ currPosY: d.F32;
73
+ currPosZ: d.F32;
74
+ prevRotX: d.F32;
75
+ prevRotY: d.F32;
76
+ prevRotZ: d.F32;
77
+ currRotX: d.F32;
78
+ currRotY: d.F32;
79
+ currRotZ: d.F32;
80
+ }>;
81
+ export declare const DYNAMIC_MESH_FLOATS = 12;
82
+ export declare const StaticMesh: d.WgslStruct<{
83
+ scaleX: d.F32;
84
+ scaleY: d.F32;
85
+ scaleZ: d.F32;
86
+ colorR: d.F32;
87
+ colorG: d.F32;
88
+ colorB: d.F32;
89
+ }>;
90
+ export declare const STATIC_MESH_FLOATS = 6;
91
+ export declare const SkinnedStaticMesh: d.WgslStruct<{
92
+ scaleX: d.F32;
93
+ scaleY: d.F32;
94
+ scaleZ: d.F32;
95
+ colorR: d.F32;
96
+ colorG: d.F32;
97
+ colorB: d.F32;
98
+ boneOffset: d.U32;
99
+ }>;
100
+ export declare const SKINNED_STATIC_MESH_FLOATS = 7;
101
+ export declare const MeshUniforms: d.WgslStruct<{
102
+ viewProjection: d.Mat4x4f;
103
+ alpha: d.F32;
104
+ lightDirX: d.F32;
105
+ lightDirY: d.F32;
106
+ lightDirZ: d.F32;
107
+ }>;
108
+ /** Per-instance animation state, uploaded from CPU each frame. */
109
+ export declare const InstanceAnimStateGPU: d.WgslStruct<{
110
+ clipId: d.I32;
111
+ time: d.F32;
112
+ skinIndex: d.U32;
113
+ boneOffset: d.U32;
114
+ prevClipId: d.I32;
115
+ prevTime: d.F32;
116
+ blendWeight: d.F32;
117
+ _pad: d.F32;
118
+ }>;
119
+ /** Uniforms for the animation compute shader. */
120
+ export declare const AnimComputeUniforms: d.WgslStruct<{
121
+ instanceCount: d.U32;
122
+ clipTableOffset: d.U32;
123
+ channelTableOffset: d.U32;
124
+ jointLookupOffset: d.U32;
125
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Built-in geometry primitives.
3
+ * Each returns a typed array of vertex data and optional indices.
4
+ */
5
+ export type BuiltInGeometry = 'quad' | 'triangle' | 'line' | 'point' | 'circle' | 'cube' | 'sphere' | 'cylinder' | 'cone';
6
+ export interface GeometryData {
7
+ /** Interleaved vertex data: [posX, posY, (posZ,) u, v, ...] */
8
+ vertices: Float32Array;
9
+ /** Optional index buffer */
10
+ indices?: Uint16Array | Uint32Array;
11
+ /** Number of vertices */
12
+ vertexCount: number;
13
+ /** Floats per vertex (stride) */
14
+ floatsPerVertex: number;
15
+ /** Whether this is a 3D geometry */
16
+ is3D: boolean;
17
+ }
18
+ /**
19
+ * 2D quad: 6 vertices (two triangles), each with position (x,y) + uv (u,v).
20
+ * Position range: [-1, 1], UV range: [0, 1].
21
+ */
22
+ export declare function createQuad(): GeometryData;
23
+ /**
24
+ * 2D triangle: 3 vertices, each with position (x,y) + uv (u,v).
25
+ */
26
+ export declare function createTriangle(): GeometryData;
27
+ /**
28
+ * 2D line: 2 vertices, position only.
29
+ */
30
+ export declare function createLine(): GeometryData;
31
+ /**
32
+ * 2D point: single vertex at origin.
33
+ */
34
+ export declare function createPoint(): GeometryData;
35
+ /**
36
+ * 2D circle: tessellated triangle fan, configurable segments.
37
+ */
38
+ export declare function createCircle(segments?: number): GeometryData;
39
+ /**
40
+ * 3D cube: 36 vertices with position (x,y,z) + normal (nx,ny,nz) + uv (u,v).
41
+ */
42
+ export declare function createCube(): GeometryData;
43
+ /**
44
+ * 3D sphere: tessellated with position + normal + uv.
45
+ */
46
+ export declare function createSphere(latSegments?: number, lonSegments?: number): GeometryData;
47
+ /**
48
+ * 3D cylinder: tessellated with position + normal + uv.
49
+ */
50
+ export declare function createCylinder(segments?: number): GeometryData;
51
+ /**
52
+ * 3D cone: tessellated with position + normal + uv.
53
+ */
54
+ export declare function createCone(segments?: number): GeometryData;
55
+ /**
56
+ * Resolve a built-in geometry name to actual data.
57
+ */
58
+ export declare function resolveBuiltInGeometry(name: BuiltInGeometry): GeometryData;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,281 @@
1
+ import type { TgpuRoot, TgpuBuffer, TgpuRenderPipeline, TgpuBindGroup, TgpuBindGroupLayout, TgpuVertexFn, TgpuFragmentFn } from 'typegpu';
2
+ import type { AnyWgslData } from 'typegpu/data';
3
+ import { d } from '../shaders/typegpu';
4
+ import type { BuiltInGeometry, GeometryData } from './built-in';
5
+ import type { ComputeKernel } from '../compute/compute-builder';
6
+ /** Map a TypeGPU data type to its JS value representation. */
7
+ type DataToValue<T> = T extends typeof d.f32 ? number : T extends typeof d.vec2f ? [number, number] | number[] : T extends typeof d.vec3f ? [number, number, number] | number[] : T extends typeof d.vec4f ? [number, number, number, number] | number[] : number | number[];
8
+ /** Partial record mapping field names to their JS values. */
9
+ type FieldValues<T extends Record<string, AnyWgslData>> = {
10
+ [K in keyof T]?: DataToValue<T[K]>;
11
+ };
12
+ /** All instance field names (dynamic + static). */
13
+ type AllFields<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>> = keyof D | keyof S;
14
+ export interface CustomGeometryLayout {
15
+ layout?: Record<string, {
16
+ type: string;
17
+ size: number;
18
+ }>;
19
+ vertices?: Array<Record<string, number | number[]>>;
20
+ indices?: number[];
21
+ }
22
+ export interface GeometryOptions {
23
+ maxInstances: number;
24
+ geometry: BuiltInGeometry | CustomGeometryLayout;
25
+ }
26
+ /** Typed instance layout config with inferred field types. */
27
+ export interface InstanceLayoutConfig<D extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, S extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
28
+ dynamic: D;
29
+ static: S;
30
+ }
31
+ export interface GeometryDataLayout<D extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, S extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, U extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
32
+ dataLayout: TgpuBindGroupLayout;
33
+ instanceLayout: InstanceLayoutConfig<D, S>;
34
+ uniformDefs: U;
35
+ }
36
+ export declare function getFieldFloats(desc: AnyWgslData): number;
37
+ export declare function createGeometryDataLayout<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>, U extends Record<string, AnyWgslData>>(instanceLayout: InstanceLayoutConfig<D, S>, uniformDefs: U, maxInstances: number): GeometryDataLayout<D, S, U>;
38
+ export declare class CustomGeometry<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
39
+ readonly name: string;
40
+ readonly maxInstances: number;
41
+ readonly geometryData: GeometryData;
42
+ private root;
43
+ private freeList;
44
+ private layoutConfig;
45
+ private dynamicFieldNames;
46
+ private staticFieldNames;
47
+ private dynamicFloatsPerInstance;
48
+ private staticFloatsPerInstance;
49
+ private dynamicData;
50
+ private staticData;
51
+ private uniformValues;
52
+ private _dynamicDirty;
53
+ private _staticDirty;
54
+ private _uniformDirty;
55
+ private _isComputeSourced;
56
+ private _drawCount;
57
+ private activeSlots;
58
+ private activeCount;
59
+ private slotToActive;
60
+ private _ctx;
61
+ private dynamicBuffer;
62
+ private staticBuffer;
63
+ private uniformBuffer;
64
+ private pipeline;
65
+ private dataBindGroup;
66
+ private canvas;
67
+ private clearColor;
68
+ /** @internal — use GeometryBuilder to create instances. */
69
+ constructor(name: string, root: TgpuRoot, maxInstances: number, geometryData: GeometryData, layoutConfig: InstanceLayoutConfig<TDynamic, TStatic>, uniformValues: Record<string, unknown>, dynamicBuffer: TgpuBuffer<AnyWgslData>, staticBuffer: TgpuBuffer<AnyWgslData>, uniformBuffer: TgpuBuffer<AnyWgslData>, pipeline: TgpuRenderPipeline, dataBindGroup: TgpuBindGroup, canvas: HTMLCanvasElement, clearColor: [number, number, number, number], isComputeSourced?: boolean);
70
+ /**
71
+ * Set the number of instances to draw. Only needed for compute-sourced geometries
72
+ * where the instance count may change dynamically.
73
+ */
74
+ setDrawCount(count: number): void;
75
+ addInstance(data: FieldValues<TDynamic> & FieldValues<TStatic>): number;
76
+ removeInstance(slot: number): void;
77
+ setInstanceData(slot: number, data: FieldValues<TDynamic> & FieldValues<TStatic>): void;
78
+ getInstance(slot: number): InstanceAccessor<TDynamic, TStatic>;
79
+ updateUniforms(values: Partial<FieldValues<TUniforms>>): void;
80
+ getActiveCount(): number;
81
+ updateAll(callback: (ctx: InstanceContext<TDynamic, TStatic>, slot: number) => void): void;
82
+ render(): void;
83
+ destroy(): void;
84
+ }
85
+ export declare class InstanceContext<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
86
+ private dynamicData;
87
+ private staticData;
88
+ private dynamicStride;
89
+ private staticStride;
90
+ private dynamicFieldNames;
91
+ private staticFieldNames;
92
+ private layout;
93
+ private dynBase;
94
+ private statBase;
95
+ /** @internal */
96
+ _bind(dynamicData: Float32Array, staticData: Float32Array, dynamicStride: number, staticStride: number, dynamicFieldNames: string[], staticFieldNames: string[], layout: InstanceLayoutConfig<TDynamic, TStatic>): void;
97
+ /** @internal */
98
+ _setSlot(slot: number): void;
99
+ get(field: AllFields<TDynamic, TStatic> & string): number | number[];
100
+ set(field: AllFields<TDynamic, TStatic> & string, value: number | number[]): void;
101
+ private fieldOffset;
102
+ }
103
+ export declare class InstanceAccessor<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
104
+ private dynamicData;
105
+ private staticData;
106
+ private dynBase;
107
+ private statBase;
108
+ private dynamicFieldNames;
109
+ private staticFieldNames;
110
+ private layout;
111
+ private _onDynDirty;
112
+ private _onStatDirty;
113
+ constructor(dynamicData: Float32Array, staticData: Float32Array, slot: number, dynamicStride: number, staticStride: number, dynamicFieldNames: string[], staticFieldNames: string[], layout: InstanceLayoutConfig<TDynamic, TStatic>, onDynDirty: () => void, onStatDirty: () => void);
114
+ get(field: AllFields<TDynamic, TStatic> & string): number | number[];
115
+ set(field: AllFields<TDynamic, TStatic> & string, value: number | number[]): void;
116
+ private fieldOffset;
117
+ }
118
+ type ShaderResult = {
119
+ vertex: TgpuVertexFn<Record<string, AnyWgslData>, Record<string, AnyWgslData>>;
120
+ fragment: TgpuFragmentFn<Record<string, AnyWgslData>, AnyWgslData>;
121
+ };
122
+ /** Vertex input builtins available in shader functions. */
123
+ export interface VertexInput {
124
+ /** The vertex index within the current draw call (0-5 for a quad). */
125
+ vertexIndex: number;
126
+ /** The instance index within the current draw call. */
127
+ instanceIndex: number;
128
+ }
129
+ /**
130
+ * Declarative shader config — no `tgpu.vertexFn`, no `'use gpu'`.
131
+ * The builder handles all TypeGPU wiring internally.
132
+ */
133
+ export interface DeclarativeShaders<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
134
+ vertex: {
135
+ /** Varyings output from vertex to fragment (position is always included). */
136
+ out: Record<string, AnyWgslData>;
137
+ /** Vertex shader body. Receives typed context and vertex input. */
138
+ fn: (ctx: ShaderContext<TDynamic, TStatic, TUniforms>, input: VertexInput) => Record<string, unknown>;
139
+ };
140
+ fragment: {
141
+ /** Fragment shader body. Receives varyings from vertex shader. */
142
+ fn: (input: Record<string, unknown>) => unknown;
143
+ };
144
+ }
145
+ type ResolveWgsl<T> = T extends (...args: any) => infer R ? R : T;
146
+ type ResolveRecord<T extends Record<string, AnyWgslData>> = {
147
+ readonly [K in keyof T]: ResolveWgsl<T[K]>;
148
+ };
149
+ /**
150
+ * Context passed to the shader factory callback.
151
+ * Provides `dynamic`, `statics`, and `uniforms` accessors with typed field names.
152
+ *
153
+ * **These accessors are lazy** — they only resolve when accessed inside a `'use gpu'` body.
154
+ * Capture them in the closure and use inside shader functions:
155
+ *
156
+ * ```ts
157
+ * .shaders(({ dynamic, statics, uniforms }) => ({
158
+ * vertex: tgpu.vertexFn({...})(function(input) {
159
+ * 'use gpu';
160
+ * const pos = dynamic[input.instanceIndex].position;
161
+ * const time = uniforms.time;
162
+ * }),
163
+ * }))
164
+ * ```
165
+ */
166
+ export interface ShaderContext<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
167
+ /** Per-instance dynamic data (updated every frame). Access: `dynamic[instanceIndex].fieldName` */
168
+ readonly dynamic: Readonly<Record<number, Readonly<ResolveRecord<TDynamic>>>>;
169
+ /** Per-instance static data (set once). Access: `statics[instanceIndex].fieldName` */
170
+ readonly statics: Readonly<Record<number, Readonly<ResolveRecord<TStatic>>>>;
171
+ /** Shared uniforms. Access: `uniforms.fieldName` */
172
+ readonly uniforms: Readonly<ResolveRecord<TUniforms>>;
173
+ /** Raw TypeGPU bind group layout — escape hatch for advanced usage. */
174
+ readonly layout: TgpuBindGroupLayout;
175
+ }
176
+ type ShaderFactory<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> = (ctx: ShaderContext<TDynamic, TStatic, TUniforms>) => ShaderResult;
177
+ export declare class GeometryBuilder<TDynamic extends Record<string, AnyWgslData> = Record<string, never>, TStatic extends Record<string, AnyWgslData> = Record<string, never>, TUniforms extends Record<string, AnyWgslData> = Record<string, never>> {
178
+ private _name;
179
+ private _options;
180
+ private _root;
181
+ private _format;
182
+ private _layoutConfig;
183
+ private _uniformDefs;
184
+ private _vertexFn;
185
+ private _fragmentFn;
186
+ private _shaderFactory;
187
+ private _vertexVaryings;
188
+ private _vertexFactory;
189
+ private _fragmentFactory;
190
+ private _declarativeShaders;
191
+ private _computeSource;
192
+ private _dataLayout;
193
+ private _canvas;
194
+ private _clearColor;
195
+ constructor(name: string, options: GeometryOptions, root: TgpuRoot, format: GPUTextureFormat, canvas: HTMLCanvasElement, clearColor: [number, number, number, number]);
196
+ instanceLayout<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>>(layout: InstanceLayoutConfig<D, S> | GeometryDataLayout<D, S, TUniforms>): GeometryBuilder<D, S, TUniforms>;
197
+ uniforms<U extends Record<string, AnyWgslData>>(defs: U): GeometryBuilder<TDynamic, TStatic, U>;
198
+ /**
199
+ * Bind a compute kernel's buffer as this geometry's dynamic instance data.
200
+ * Zero-copy: the render shader reads directly from the compute buffer.
201
+ *
202
+ * ```ts
203
+ * const compute = renderer.createCompute('physics', { workgroupSize: 256 })
204
+ * .buffers({ particles: { storage: d.arrayOf(ParticleStruct, MAX), readwrite: true } })
205
+ * .shader(...)
206
+ * .build();
207
+ *
208
+ * const render = renderer.createGeometry('vis', { maxInstances: MAX, geometry: 'quad' })
209
+ * .fromCompute(compute, 'particles')
210
+ * .uniforms({ resolution: d.vec2f })
211
+ * .shaders({ ... })
212
+ * .build();
213
+ * ```
214
+ */
215
+ fromCompute(kernel: ComputeKernel<Record<string, unknown>>, bufferName: string): this;
216
+ /**
217
+ * Provide shaders as a callback that receives the bind group layout.
218
+ *
219
+ * ```ts
220
+ * .shaders((layout) => ({
221
+ * vertex: tgpu.vertexFn({...})(function(input) {
222
+ * const pos = layout.$.dynamicInstances[input.instanceIndex].position;
223
+ * }),
224
+ * fragment: tgpu.fragmentFn({...})(function(input) { ... }),
225
+ * }))
226
+ * ```
227
+ *
228
+ * Or provide pre-built shaders directly:
229
+ * ```ts
230
+ * .shaders(vertexFn, fragmentFn)
231
+ * ```
232
+ */
233
+ /**
234
+ * Provide shaders via a factory callback that receives a typed context.
235
+ *
236
+ * ```ts
237
+ * .shaders(({ dynamic, statics, uniforms }) => ({
238
+ * vertex: tgpu.vertexFn({...})(function(input) { ... }),
239
+ * fragment: tgpu.fragmentFn({...})(function(input) { ... }),
240
+ * }))
241
+ * ```
242
+ *
243
+ * Or provide pre-built shaders directly:
244
+ * ```ts
245
+ * .shaders(vertexFn, fragmentFn)
246
+ * ```
247
+ */
248
+ shaders(vertexOrFactoryOrConfig: TgpuVertexFn<Record<string, AnyWgslData>, Record<string, AnyWgslData>> | ShaderFactory<TDynamic, TStatic, TUniforms> | DeclarativeShaders<TDynamic, TStatic, TUniforms>, fragment?: TgpuFragmentFn<Record<string, AnyWgslData>, AnyWgslData>): this;
249
+ /**
250
+ * Set the vertex shader with typed context.
251
+ * The builder handles `tgpu.vertexFn` wrapping and builtin inputs.
252
+ *
253
+ * ```ts
254
+ * .vertex(
255
+ * { brightness: d.f32, localUV: d.vec2f }, // varyings
256
+ * (ctx) => function(input) {
257
+ * 'use gpu';
258
+ * const pos = ctx.dynamic[input.instanceIndex].position;
259
+ * return { pos: d.vec4f(...), brightness, localUV };
260
+ * }
261
+ * )
262
+ * ```
263
+ */
264
+ vertexShader<V extends Record<string, AnyWgslData>>(varyings: V, factory: (ctx: ShaderContext<TDynamic, TStatic, TUniforms>) => (input: {
265
+ vertexIndex: number;
266
+ instanceIndex: number;
267
+ }) => Record<string, AnyWgslData>): this;
268
+ /**
269
+ * Set the fragment shader.
270
+ *
271
+ * ```ts
272
+ * .fragmentShader(function(input) {
273
+ * 'use gpu';
274
+ * return d.vec4f(1, 1, 1, 1);
275
+ * })
276
+ * ```
277
+ */
278
+ fragmentShader(fn: (input: Record<string, unknown>) => unknown): this;
279
+ build(): CustomGeometry<TDynamic, TStatic, TUniforms>;
280
+ }
281
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from "./built-in";
2
+ export * from "./geometry-builder";
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @murow/webgpu — WebGPU rendering backend for murow.
3
+ *
4
+ * Re-exports TypeGPU's data module as `d` for user-facing shader authoring.
5
+ */
6
+ export { d, std } from './shaders/typegpu';
7
+ export { WebGPU2DRenderer } from './2d/renderer';
8
+ export { SpriteAccessor } from './2d/sprite-accessor';
9
+ export { WebGPU3DRenderer } from './3d/renderer';
10
+ export type { ModelData, ModelHandle, GltfModel, InstanceHandle, MeshInstanceHandle, MeshInstanceOptions } from './3d/renderer';
11
+ export { MorphAnimation } from './3d/morph-animation';
12
+ export type { MorphClip, MorphState, MorphClipConfig } from './3d/morph-animation';
13
+ export { SkeletalAnimation } from './3d/skeletal-animation';
14
+ export type { SkeletalClip, SkeletalAnimState, PlayOptions } from './3d/skeletal-animation';
15
+ export type { SkinData, AnimationClipData, AnimationChannel } from './3d/gltf-skin-parser';
16
+ export { Camera2D } from './camera/camera-2d';
17
+ export { Camera3D } from './camera/camera-3d';
18
+ export { GeometryBuilder, CustomGeometry, InstanceAccessor, InstanceContext, getFieldFloats, createGeometryDataLayout } from './geometry/geometry-builder';
19
+ export type { GeometryOptions, InstanceLayoutConfig, CustomGeometryLayout, GeometryDataLayout, ShaderContext } from './geometry/geometry-builder';
20
+ export { resolveBuiltInGeometry } from './geometry/built-in';
21
+ export type { BuiltInGeometry, GeometryData } from './geometry/built-in';
22
+ export { Spritesheet, computeGridUVs, computeTexturePackerUVs, loadImage, createTextureFromBitmap } from './spritesheet/spritesheet';
23
+ export type { SpritesheetConfig, TexturePackerData } from './spritesheet/spritesheet';
24
+ export { ParticleEmitter } from './particle/emitter';
25
+ export type { ParticleEmitterConfig, Range } from './particle/emitter';
26
+ export { AnimationController } from './2d/animation';
27
+ export type { AnimationClip, AnimationState, AnimationClipConfig } from './2d/animation';
28
+ export { ComputeBuilder, ComputeKernel } from './compute/compute-builder';
29
+ export type { ComputeOptions, ComputeBufferDef, ComputeInput } from './compute/compute-builder';
30
+ export { rotate2d, worldToClip2d, worldToClip3d, remap, scaleRotate2d, inverseLerp } from './shaders/utils';
31
+ export * from './core/constants';
32
+ export { DynamicSprite, StaticSprite, SpriteUniforms, DynamicInstance3D, StaticInstance3D, DynamicMesh, StaticMesh, SkinnedStaticMesh, MeshUniforms } from './core/types';
@@ -0,0 +1,36 @@
1
+ import type { SpritesheetHandle } from 'murow/renderer/types';
2
+ import type { WebGPU2DRenderer } from '../2d/renderer';
3
+ export interface Range {
4
+ min: number;
5
+ max: number;
6
+ }
7
+ export interface ParticleEmitterConfig {
8
+ max: number;
9
+ lifetime: Range;
10
+ speed: Range;
11
+ size: Range;
12
+ gravity?: [number, number];
13
+ color: [number, number, number, number];
14
+ direction: Range;
15
+ fadeOut?: boolean;
16
+ sheet?: SpritesheetHandle;
17
+ sprite?: number;
18
+ seed?: number;
19
+ }
20
+ export declare class ParticleEmitter {
21
+ private renderer;
22
+ private config;
23
+ private sprites;
24
+ private lifetimes;
25
+ private maxLifetimes;
26
+ private velocitiesX;
27
+ private velocitiesY;
28
+ private activeCount;
29
+ private head;
30
+ private rng;
31
+ constructor(renderer: WebGPU2DRenderer, config: ParticleEmitterConfig);
32
+ emit(x: number, y: number, count?: number): void;
33
+ update(deltaTime: number): void;
34
+ getActiveCount(): number;
35
+ clear(): void;
36
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../2d/shader";
2
+ export { rotate2d, worldToClip2d, worldToClip3d, remap, scaleRotate2d, inverseLerp } from './utils';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Attach TypeGPU shader metadata to a function at runtime.
3
+ *
4
+ * @param fn The shader function
5
+ * @param getExternals Lazy function returning external variable bindings.
6
+ * Called during pipeline resolution. The returned record
7
+ * is augmented with auto-detected namespace aliases (see
8
+ * `namespaceAliases`) so bundler-renamed identifiers
9
+ * (e.g. `d10` instead of `d`) still resolve.
10
+ * @param stripFirstParam If true, removes the first parameter (ctx) and treats
11
+ * its destructured names as externals instead
12
+ * @param namespaceAliases Map of canonical namespace name → namespace object.
13
+ * When a bundler renames `d` to `d10`, we detect it by
14
+ * matching the member-access pattern in the function
15
+ * source against the members of each candidate namespace,
16
+ * and alias the renamed name to the right object.
17
+ */
18
+ export declare function attachShaderMetadata(fn: Function, getExternals: () => Record<string, unknown>, stripFirstParam?: boolean, namespaceAliases?: Record<string, object>): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default 2D sprite shader — WGSL source as a template string.
3
+ *
4
+ * Supports:
5
+ * - Instanced rendering (one draw call per spritesheet batch)
6
+ * - GPU-side interpolation between previous and current frame
7
+ * - Per-sprite: position, rotation, scale, UV, tint, opacity, flip
8
+ * - Camera transform via uniform matrix
9
+ */
10
+ export declare const SPRITE_2D_WGSL = "\n// --- Uniforms ---\nstruct Uniforms {\n viewProjection: mat3x3<f32>,\n alpha: f32,\n resolution: vec2<f32>,\n}\n\n@group(0) @binding(0) var<uniform> uniforms: Uniforms;\n\n// --- Instance data (storage buffers) ---\nstruct DynamicInstance {\n prevX: f32,\n prevY: f32,\n currX: f32,\n currY: f32,\n prevRotation: f32,\n currRotation: f32,\n}\n\nstruct StaticInstance {\n scaleX: f32,\n scaleY: f32,\n uvMinX: f32,\n uvMinY: f32,\n uvMaxX: f32,\n uvMaxY: f32,\n layer: f32,\n flipX: f32,\n flipY: f32,\n opacity: f32,\n tintR: f32,\n tintG: f32,\n tintB: f32,\n tintA: f32,\n}\n\n@group(0) @binding(1) var<storage, read> dynamicInstances: array<DynamicInstance>;\n@group(0) @binding(2) var<storage, read> staticInstances: array<StaticInstance>;\n\n// --- Texture ---\n@group(1) @binding(0) var spriteTex: texture_2d<f32>;\n@group(1) @binding(1) var spriteSampler: sampler;\n\n// --- Vertex output ---\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>,\n @location(1) tint: vec4<f32>,\n @location(2) opacity: f32,\n}\n\n@vertex\nfn vs_main(\n @builtin(vertex_index) vertexIndex: u32,\n @builtin(instance_index) instanceIndex: u32,\n) -> VertexOutput {\n let dyn = dynamicInstances[instanceIndex];\n let stat = staticInstances[instanceIndex];\n\n // Interpolate position\n let alpha = uniforms.alpha;\n let x = mix(dyn.prevX, dyn.currX, alpha);\n let y = mix(dyn.prevY, dyn.currY, alpha);\n\n // Interpolate rotation\n let rotation = mix(dyn.prevRotation, dyn.currRotation, alpha);\n\n // Quad vertices: 6 verts for 2 triangles\n let isRight = f32((vertexIndex & 1u) ^ ((vertexIndex >> 1u) & 1u));\n let isTop = f32((vertexIndex + 1u) / 3u);\n // Adjust for second triangle\n let localX = select(-0.5, 0.5, isRight > 0.0) * stat.scaleX;\n let localY = select(-0.5, 0.5, isTop > 0.0) * stat.scaleY;\n\n // Apply flip\n let fx = select(1.0, -1.0, stat.flipX > 0.0);\n let fy = select(1.0, -1.0, stat.flipY > 0.0);\n let flippedX = localX * fx;\n let flippedY = localY * fy;\n\n // Rotate\n let cosR = cos(rotation);\n let sinR = sin(rotation);\n let rotX = flippedX * cosR - flippedY * sinR;\n let rotY = flippedX * sinR + flippedY * cosR;\n\n // World position\n let worldPos = vec3<f32>(x + rotX, y + rotY, 1.0);\n\n // Apply camera view-projection\n let clipPos = uniforms.viewProjection * worldPos;\n\n // UV mapping\n let u = mix(stat.uvMinX, stat.uvMaxX, isRight);\n let v = mix(stat.uvMinY, stat.uvMaxY, 1.0 - isTop);\n\n var out: VertexOutput;\n out.position = vec4<f32>(clipPos.xy, 0.0, 1.0);\n out.uv = vec2<f32>(u, v);\n out.tint = vec4<f32>(stat.tintR, stat.tintG, stat.tintB, stat.tintA);\n out.opacity = stat.opacity;\n return out;\n}\n\n@fragment\nfn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {\n let texColor = textureSample(spriteTex, spriteSampler, in.uv);\n let tinted = texColor * in.tint;\n return vec4<f32>(tinted.rgb, tinted.a * in.opacity);\n}\n";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Bundler-safe wrappers around TypeGPU's `data` and `std` namespace exports.
3
+ */
4
+ import * as _d from 'typegpu/data';
5
+ import * as _std from 'typegpu/std';
6
+ export declare const d: typeof _d;
7
+ export declare const std: typeof _std;
8
+ export type d = typeof _d;
9
+ export type std = typeof _std;
@@ -0,0 +1,28 @@
1
+ import * as d from 'typegpu/data';
2
+ /**
3
+ * Rotate a 2D point around the origin by `angle` radians.
4
+ */
5
+ export declare const rotate2d: import("typegpu").TgpuFn<(point: d.Vec2f, angle: d.F32) => d.Vec2f>;
6
+ /**
7
+ * Transform a 2D world position to clip space using a 3x3 camera matrix
8
+ * (stored as mat3x3f). Returns vec4f for vertex output.
9
+ */
10
+ export declare const worldToClip2d: import("typegpu").TgpuFn<(worldPos: d.Vec2f, cameraMatrix: d.Mat3x3f) => d.Vec4f>;
11
+ /**
12
+ * Transform a 3D world position to clip space using a 4x4 view-projection matrix.
13
+ */
14
+ export declare const worldToClip3d: import("typegpu").TgpuFn<(worldPos: d.Vec3f, vpMatrix: d.Mat4x4f) => d.Vec4f>;
15
+ /**
16
+ * Remap a value from one range to another.
17
+ * `remap(0.5, 0, 1, 10, 20)` returns `15`.
18
+ */
19
+ export declare const remap: import("typegpu").TgpuFn<(value: d.F32, inMin: d.F32, inMax: d.F32, outMin: d.F32, outMax: d.F32) => d.F32>;
20
+ /**
21
+ * Compute a 2D scale+rotation matrix from scale and angle.
22
+ * Useful for sprite transforms in the vertex shader.
23
+ */
24
+ export declare const scaleRotate2d: import("typegpu").TgpuFn<(scale: d.Vec2f, angle: d.F32) => d.Mat2x2f>;
25
+ /**
26
+ * Inverse lerp — given a value in [min, max], returns its t in [0, 1].
27
+ */
28
+ export declare const inverseLerp: import("typegpu").TgpuFn<(min: d.F32, max: d.F32, value: d.F32) => d.F32>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./spritesheet";