aigpu 0.3.1

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 (491) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +85 -0
  3. package/bin/aigpu.js +15 -0
  4. package/client.d.ts +15 -0
  5. package/dist/agent-tools.d.ts +61 -0
  6. package/dist/agent-tools.d.ts.map +1 -0
  7. package/dist/agent-tools.js +107 -0
  8. package/dist/agent-tools.js.map +1 -0
  9. package/dist/agent.d.ts +56 -0
  10. package/dist/agent.d.ts.map +1 -0
  11. package/dist/agent.js +243 -0
  12. package/dist/agent.js.map +1 -0
  13. package/dist/api-types.d.ts +56 -0
  14. package/dist/api-types.d.ts.map +1 -0
  15. package/dist/api-types.js +2 -0
  16. package/dist/api-types.js.map +1 -0
  17. package/dist/bind-cache.d.ts +19 -0
  18. package/dist/bind-cache.d.ts.map +1 -0
  19. package/dist/bind-cache.js +43 -0
  20. package/dist/bind-cache.js.map +1 -0
  21. package/dist/bundle.d.ts +30 -0
  22. package/dist/bundle.d.ts.map +1 -0
  23. package/dist/bundle.js +127 -0
  24. package/dist/bundle.js.map +1 -0
  25. package/dist/claim-validation-encode.d.ts +14 -0
  26. package/dist/claim-validation-encode.d.ts.map +1 -0
  27. package/dist/claim-validation-encode.js +28 -0
  28. package/dist/claim-validation-encode.js.map +1 -0
  29. package/dist/claim-validation.d.ts +73 -0
  30. package/dist/claim-validation.d.ts.map +1 -0
  31. package/dist/claim-validation.js +135 -0
  32. package/dist/claim-validation.js.map +1 -0
  33. package/dist/cli/bin/aigpu.js +101 -0
  34. package/dist/cli/lib/check/run.js +153 -0
  35. package/dist/cli/lib/docs/commands/cat.js +12 -0
  36. package/dist/cli/lib/docs/commands/find.js +180 -0
  37. package/dist/cli/lib/docs/commands/grep.js +49 -0
  38. package/dist/cli/lib/docs/commands/ls.js +41 -0
  39. package/dist/cli/lib/docs/commands/path.js +12 -0
  40. package/dist/cli/lib/docs/commands/resolve.js +41 -0
  41. package/dist/cli/lib/docs/commands/shared.js +13 -0
  42. package/dist/cli/lib/docs/commands/symbols.js +25 -0
  43. package/dist/cli/lib/docs/errors.js +8 -0
  44. package/dist/cli/lib/docs/generate/check-drift.js +61 -0
  45. package/dist/cli/lib/docs/generate/cli.js +12 -0
  46. package/dist/cli/lib/docs/generate/generate.js +113 -0
  47. package/dist/cli/lib/docs/generate/manifest.js +218 -0
  48. package/dist/cli/lib/docs/generate/skill.js +150 -0
  49. package/dist/cli/lib/docs/help.js +21 -0
  50. package/dist/cli/lib/docs/index.js +62 -0
  51. package/dist/cli/lib/docs/model.js +7 -0
  52. package/dist/cli/lib/docs/run.js +24 -0
  53. package/dist/cli/lib/docs/service.js +119 -0
  54. package/dist/cli/lib/doctor/run.js +236 -0
  55. package/dist/cli/lib/examples/errors.js +13 -0
  56. package/dist/cli/lib/examples/hashing.js +9 -0
  57. package/dist/cli/lib/examples/help.js +13 -0
  58. package/dist/cli/lib/examples/local-source.js +142 -0
  59. package/dist/cli/lib/examples/paths.js +12 -0
  60. package/dist/cli/lib/examples/pull.js +58 -0
  61. package/dist/cli/lib/examples/run.js +71 -0
  62. package/dist/cli/lib/examples/search.js +6 -0
  63. package/dist/cli/lib/examples/service.js +118 -0
  64. package/dist/cli/lib/generated/docs-manifest.generated.js +4758 -0
  65. package/dist/cli/lib/install-dawn/run.js +24 -0
  66. package/dist/cli/lib/install-software-renderer/run.js +17 -0
  67. package/dist/cli/lib/mcp/http.js +93 -0
  68. package/dist/cli/lib/mcp/server.js +258 -0
  69. package/dist/cli/lib/mcp/stdio.js +34 -0
  70. package/dist/cli/lib/snapshot/png.js +62 -0
  71. package/dist/cli/lib/snapshot/render.js +22 -0
  72. package/dist/cli/lib/snapshot/run.js +79 -0
  73. package/dist/cli/lib/snapshot/shaders.js +11 -0
  74. package/dist/cli/package.json +4 -0
  75. package/dist/client.d.ts +12 -0
  76. package/dist/client.d.ts.map +1 -0
  77. package/dist/client.js +2 -0
  78. package/dist/client.js.map +1 -0
  79. package/dist/clock.d.ts +26 -0
  80. package/dist/clock.d.ts.map +1 -0
  81. package/dist/clock.js +50 -0
  82. package/dist/clock.js.map +1 -0
  83. package/dist/compute.d.ts +41 -0
  84. package/dist/compute.d.ts.map +1 -0
  85. package/dist/compute.js +132 -0
  86. package/dist/compute.js.map +1 -0
  87. package/dist/core/render-bundle.d.ts +30 -0
  88. package/dist/core/render-bundle.d.ts.map +1 -0
  89. package/dist/core/render-bundle.js +39 -0
  90. package/dist/core/render-bundle.js.map +1 -0
  91. package/dist/core/storage-buffer.d.ts +81 -0
  92. package/dist/core/storage-buffer.d.ts.map +1 -0
  93. package/dist/core/storage-buffer.js +91 -0
  94. package/dist/core/storage-buffer.js.map +1 -0
  95. package/dist/core/structured-uniform.d.ts +33 -0
  96. package/dist/core/structured-uniform.d.ts.map +1 -0
  97. package/dist/core/structured-uniform.js +110 -0
  98. package/dist/core/structured-uniform.js.map +1 -0
  99. package/dist/core/uniform-pool-internals.d.ts +12 -0
  100. package/dist/core/uniform-pool-internals.d.ts.map +1 -0
  101. package/dist/core/uniform-pool-internals.js +24 -0
  102. package/dist/core/uniform-pool-internals.js.map +1 -0
  103. package/dist/core/uniform-pool-types.d.ts +22 -0
  104. package/dist/core/uniform-pool-types.d.ts.map +1 -0
  105. package/dist/core/uniform-pool-types.js +2 -0
  106. package/dist/core/uniform-pool-types.js.map +1 -0
  107. package/dist/core/uniform-pool.d.ts +22 -0
  108. package/dist/core/uniform-pool.d.ts.map +1 -0
  109. package/dist/core/uniform-pool.js +128 -0
  110. package/dist/core/uniform-pool.js.map +1 -0
  111. package/dist/core/uniform.d.ts +55 -0
  112. package/dist/core/uniform.d.ts.map +1 -0
  113. package/dist/core/uniform.js +64 -0
  114. package/dist/core/uniform.js.map +1 -0
  115. package/dist/core/wgsl-alignment.d.ts +24 -0
  116. package/dist/core/wgsl-alignment.d.ts.map +1 -0
  117. package/dist/core/wgsl-alignment.js +81 -0
  118. package/dist/core/wgsl-alignment.js.map +1 -0
  119. package/dist/core.d.ts +13 -0
  120. package/dist/core.d.ts.map +1 -0
  121. package/dist/core.js +7 -0
  122. package/dist/core.js.map +1 -0
  123. package/dist/dom.d.ts +37 -0
  124. package/dist/dom.d.ts.map +1 -0
  125. package/dist/dom.js +81 -0
  126. package/dist/dom.js.map +1 -0
  127. package/dist/draw-protocols.d.ts +36 -0
  128. package/dist/draw-protocols.d.ts.map +1 -0
  129. package/dist/draw-protocols.js +10 -0
  130. package/dist/draw-protocols.js.map +1 -0
  131. package/dist/draw.d.ts +248 -0
  132. package/dist/draw.d.ts.map +1 -0
  133. package/dist/draw.js +890 -0
  134. package/dist/draw.js.map +1 -0
  135. package/dist/effect.d.ts +53 -0
  136. package/dist/effect.d.ts.map +1 -0
  137. package/dist/effect.js +75 -0
  138. package/dist/effect.js.map +1 -0
  139. package/dist/entry-metadata.d.ts +16 -0
  140. package/dist/entry-metadata.d.ts.map +1 -0
  141. package/dist/entry-metadata.js +27 -0
  142. package/dist/entry-metadata.js.map +1 -0
  143. package/dist/errors.d.ts +96 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +616 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/frame-protocols.d.ts +107 -0
  148. package/dist/frame-protocols.d.ts.map +1 -0
  149. package/dist/frame-protocols.js +20 -0
  150. package/dist/frame-protocols.js.map +1 -0
  151. package/dist/frame-state.d.ts +32 -0
  152. package/dist/frame-state.d.ts.map +1 -0
  153. package/dist/frame-state.js +62 -0
  154. package/dist/frame-state.js.map +1 -0
  155. package/dist/frame.d.ts +127 -0
  156. package/dist/frame.d.ts.map +1 -0
  157. package/dist/frame.js +645 -0
  158. package/dist/frame.js.map +1 -0
  159. package/dist/group-claim.d.ts +9 -0
  160. package/dist/group-claim.d.ts.map +1 -0
  161. package/dist/group-claim.js +7 -0
  162. package/dist/group-claim.js.map +1 -0
  163. package/dist/index.d.ts +41 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +27 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/indirect.d.ts +39 -0
  168. package/dist/indirect.d.ts.map +1 -0
  169. package/dist/indirect.js +61 -0
  170. package/dist/indirect.js.map +1 -0
  171. package/dist/init-from-device.d.ts +11 -0
  172. package/dist/init-from-device.d.ts.map +1 -0
  173. package/dist/init-from-device.js +56 -0
  174. package/dist/init-from-device.js.map +1 -0
  175. package/dist/init.d.ts +12 -0
  176. package/dist/init.d.ts.map +1 -0
  177. package/dist/init.js +7 -0
  178. package/dist/init.js.map +1 -0
  179. package/dist/kernel.d.ts +104 -0
  180. package/dist/kernel.d.ts.map +1 -0
  181. package/dist/kernel.js +151 -0
  182. package/dist/kernel.js.map +1 -0
  183. package/dist/lifecycle.d.ts +10 -0
  184. package/dist/lifecycle.d.ts.map +1 -0
  185. package/dist/lifecycle.js +21 -0
  186. package/dist/lifecycle.js.map +1 -0
  187. package/dist/live-kernel.d.ts +48 -0
  188. package/dist/live-kernel.d.ts.map +1 -0
  189. package/dist/live-kernel.js +67 -0
  190. package/dist/live-kernel.js.map +1 -0
  191. package/dist/mock.d.ts +42 -0
  192. package/dist/mock.d.ts.map +1 -0
  193. package/dist/mock.js +29 -0
  194. package/dist/mock.js.map +1 -0
  195. package/dist/node.d.ts +48 -0
  196. package/dist/node.d.ts.map +1 -0
  197. package/dist/node.js +36 -0
  198. package/dist/node.js.map +1 -0
  199. package/dist/ping-pong.d.ts +19 -0
  200. package/dist/ping-pong.d.ts.map +1 -0
  201. package/dist/ping-pong.js +67 -0
  202. package/dist/ping-pong.js.map +1 -0
  203. package/dist/pipeline-store.d.ts +89 -0
  204. package/dist/pipeline-store.d.ts.map +1 -0
  205. package/dist/pipeline-store.js +366 -0
  206. package/dist/pipeline-store.js.map +1 -0
  207. package/dist/query-ring.d.ts +91 -0
  208. package/dist/query-ring.d.ts.map +1 -0
  209. package/dist/query-ring.js +178 -0
  210. package/dist/query-ring.js.map +1 -0
  211. package/dist/render-service.d.ts +23 -0
  212. package/dist/render-service.d.ts.map +1 -0
  213. package/dist/render-service.js +37 -0
  214. package/dist/render-service.js.map +1 -0
  215. package/dist/sampler.d.ts +19 -0
  216. package/dist/sampler.d.ts.map +1 -0
  217. package/dist/sampler.js +46 -0
  218. package/dist/sampler.js.map +1 -0
  219. package/dist/scene/camera.d.ts +91 -0
  220. package/dist/scene/camera.d.ts.map +1 -0
  221. package/dist/scene/camera.js +221 -0
  222. package/dist/scene/camera.js.map +1 -0
  223. package/dist/scene/geometries.d.ts +26 -0
  224. package/dist/scene/geometries.d.ts.map +1 -0
  225. package/dist/scene/geometries.js +26 -0
  226. package/dist/scene/geometries.js.map +1 -0
  227. package/dist/scene/geometry-descriptor.d.ts +120 -0
  228. package/dist/scene/geometry-descriptor.d.ts.map +1 -0
  229. package/dist/scene/geometry-descriptor.js +378 -0
  230. package/dist/scene/geometry-descriptor.js.map +1 -0
  231. package/dist/scene/geometry-recipe.d.ts +41 -0
  232. package/dist/scene/geometry-recipe.d.ts.map +1 -0
  233. package/dist/scene/geometry-recipe.js +40 -0
  234. package/dist/scene/geometry-recipe.js.map +1 -0
  235. package/dist/scene/geometry-src/camera-math.d.ts +6 -0
  236. package/dist/scene/geometry-src/camera-math.d.ts.map +1 -0
  237. package/dist/scene/geometry-src/camera-math.js +47 -0
  238. package/dist/scene/geometry-src/camera-math.js.map +1 -0
  239. package/dist/scene/geometry-src/camera.d.ts +10 -0
  240. package/dist/scene/geometry-src/camera.d.ts.map +1 -0
  241. package/dist/scene/geometry-src/camera.js +2 -0
  242. package/dist/scene/geometry-src/camera.js.map +1 -0
  243. package/dist/scene/geometry-src/capsule-data.d.ts +10 -0
  244. package/dist/scene/geometry-src/capsule-data.d.ts.map +1 -0
  245. package/dist/scene/geometry-src/capsule-data.js +61 -0
  246. package/dist/scene/geometry-src/capsule-data.js.map +1 -0
  247. package/dist/scene/geometry-src/cone-data.d.ts +13 -0
  248. package/dist/scene/geometry-src/cone-data.d.ts.map +1 -0
  249. package/dist/scene/geometry-src/cone-data.js +52 -0
  250. package/dist/scene/geometry-src/cone-data.js.map +1 -0
  251. package/dist/scene/geometry-src/cylinder-data.d.ts +14 -0
  252. package/dist/scene/geometry-src/cylinder-data.d.ts.map +1 -0
  253. package/dist/scene/geometry-src/cylinder-data.js +58 -0
  254. package/dist/scene/geometry-src/cylinder-data.js.map +1 -0
  255. package/dist/scene/geometry-src/deg-to-rad.d.ts +2 -0
  256. package/dist/scene/geometry-src/deg-to-rad.d.ts.map +1 -0
  257. package/dist/scene/geometry-src/deg-to-rad.js +4 -0
  258. package/dist/scene/geometry-src/deg-to-rad.js.map +1 -0
  259. package/dist/scene/geometry-src/disk-data.d.ts +12 -0
  260. package/dist/scene/geometry-src/disk-data.d.ts.map +1 -0
  261. package/dist/scene/geometry-src/disk-data.js +21 -0
  262. package/dist/scene/geometry-src/disk-data.js.map +1 -0
  263. package/dist/scene/geometry-src/errors.d.ts +3 -0
  264. package/dist/scene/geometry-src/errors.d.ts.map +1 -0
  265. package/dist/scene/geometry-src/errors.js +5 -0
  266. package/dist/scene/geometry-src/errors.js.map +1 -0
  267. package/dist/scene/geometry-src/icosphere-data.d.ts +8 -0
  268. package/dist/scene/geometry-src/icosphere-data.d.ts.map +1 -0
  269. package/dist/scene/geometry-src/icosphere-data.js +58 -0
  270. package/dist/scene/geometry-src/icosphere-data.js.map +1 -0
  271. package/dist/scene/geometry-src/index.d.ts +36 -0
  272. package/dist/scene/geometry-src/index.d.ts.map +1 -0
  273. package/dist/scene/geometry-src/index.js +21 -0
  274. package/dist/scene/geometry-src/index.js.map +1 -0
  275. package/dist/scene/geometry-src/mesh-box.d.ts +8 -0
  276. package/dist/scene/geometry-src/mesh-box.d.ts.map +1 -0
  277. package/dist/scene/geometry-src/mesh-box.js +57 -0
  278. package/dist/scene/geometry-src/mesh-box.js.map +1 -0
  279. package/dist/scene/geometry-src/mesh-cache.d.ts +4 -0
  280. package/dist/scene/geometry-src/mesh-cache.d.ts.map +1 -0
  281. package/dist/scene/geometry-src/mesh-cache.js +14 -0
  282. package/dist/scene/geometry-src/mesh-cache.js.map +1 -0
  283. package/dist/scene/geometry-src/mesh-capsule.d.ts +14 -0
  284. package/dist/scene/geometry-src/mesh-capsule.d.ts.map +1 -0
  285. package/dist/scene/geometry-src/mesh-capsule.js +52 -0
  286. package/dist/scene/geometry-src/mesh-capsule.js.map +1 -0
  287. package/dist/scene/geometry-src/mesh-cone.d.ts +16 -0
  288. package/dist/scene/geometry-src/mesh-cone.d.ts.map +1 -0
  289. package/dist/scene/geometry-src/mesh-cone.js +54 -0
  290. package/dist/scene/geometry-src/mesh-cone.js.map +1 -0
  291. package/dist/scene/geometry-src/mesh-cylinder.d.ts +18 -0
  292. package/dist/scene/geometry-src/mesh-cylinder.d.ts.map +1 -0
  293. package/dist/scene/geometry-src/mesh-cylinder.js +67 -0
  294. package/dist/scene/geometry-src/mesh-cylinder.js.map +1 -0
  295. package/dist/scene/geometry-src/mesh-disk.d.ts +11 -0
  296. package/dist/scene/geometry-src/mesh-disk.d.ts.map +1 -0
  297. package/dist/scene/geometry-src/mesh-disk.js +45 -0
  298. package/dist/scene/geometry-src/mesh-disk.js.map +1 -0
  299. package/dist/scene/geometry-src/mesh-dodecahedron.d.ts +4 -0
  300. package/dist/scene/geometry-src/mesh-dodecahedron.d.ts.map +1 -0
  301. package/dist/scene/geometry-src/mesh-dodecahedron.js +10 -0
  302. package/dist/scene/geometry-src/mesh-dodecahedron.js.map +1 -0
  303. package/dist/scene/geometry-src/mesh-fullscreen-quad.d.ts +7 -0
  304. package/dist/scene/geometry-src/mesh-fullscreen-quad.d.ts.map +1 -0
  305. package/dist/scene/geometry-src/mesh-fullscreen-quad.js +39 -0
  306. package/dist/scene/geometry-src/mesh-fullscreen-quad.js.map +1 -0
  307. package/dist/scene/geometry-src/mesh-icosahedron.d.ts +4 -0
  308. package/dist/scene/geometry-src/mesh-icosahedron.d.ts.map +1 -0
  309. package/dist/scene/geometry-src/mesh-icosahedron.js +10 -0
  310. package/dist/scene/geometry-src/mesh-icosahedron.js.map +1 -0
  311. package/dist/scene/geometry-src/mesh-icosphere.d.ts +11 -0
  312. package/dist/scene/geometry-src/mesh-icosphere.d.ts.map +1 -0
  313. package/dist/scene/geometry-src/mesh-icosphere.js +47 -0
  314. package/dist/scene/geometry-src/mesh-icosphere.js.map +1 -0
  315. package/dist/scene/geometry-src/mesh-octahedron.d.ts +4 -0
  316. package/dist/scene/geometry-src/mesh-octahedron.d.ts.map +1 -0
  317. package/dist/scene/geometry-src/mesh-octahedron.js +10 -0
  318. package/dist/scene/geometry-src/mesh-octahedron.js.map +1 -0
  319. package/dist/scene/geometry-src/mesh-plane.d.ts +13 -0
  320. package/dist/scene/geometry-src/mesh-plane.d.ts.map +1 -0
  321. package/dist/scene/geometry-src/mesh-plane.js +51 -0
  322. package/dist/scene/geometry-src/mesh-plane.js.map +1 -0
  323. package/dist/scene/geometry-src/mesh-ring.d.ts +12 -0
  324. package/dist/scene/geometry-src/mesh-ring.d.ts.map +1 -0
  325. package/dist/scene/geometry-src/mesh-ring.js +47 -0
  326. package/dist/scene/geometry-src/mesh-ring.js.map +1 -0
  327. package/dist/scene/geometry-src/mesh-sphere.d.ts +10 -0
  328. package/dist/scene/geometry-src/mesh-sphere.d.ts.map +1 -0
  329. package/dist/scene/geometry-src/mesh-sphere.js +51 -0
  330. package/dist/scene/geometry-src/mesh-sphere.js.map +1 -0
  331. package/dist/scene/geometry-src/mesh-tetrahedron.d.ts +5 -0
  332. package/dist/scene/geometry-src/mesh-tetrahedron.d.ts.map +1 -0
  333. package/dist/scene/geometry-src/mesh-tetrahedron.js +10 -0
  334. package/dist/scene/geometry-src/mesh-tetrahedron.js.map +1 -0
  335. package/dist/scene/geometry-src/mesh-torus.d.ts +17 -0
  336. package/dist/scene/geometry-src/mesh-torus.d.ts.map +1 -0
  337. package/dist/scene/geometry-src/mesh-torus.js +56 -0
  338. package/dist/scene/geometry-src/mesh-torus.js.map +1 -0
  339. package/dist/scene/geometry-src/mesh-types.d.ts +38 -0
  340. package/dist/scene/geometry-src/mesh-types.d.ts.map +1 -0
  341. package/dist/scene/geometry-src/mesh-types.js +2 -0
  342. package/dist/scene/geometry-src/mesh-types.js.map +1 -0
  343. package/dist/scene/geometry-src/mesh.d.ts +61 -0
  344. package/dist/scene/geometry-src/mesh.d.ts.map +1 -0
  345. package/dist/scene/geometry-src/mesh.js +49 -0
  346. package/dist/scene/geometry-src/mesh.js.map +1 -0
  347. package/dist/scene/geometry-src/orthographic-camera.d.ts +14 -0
  348. package/dist/scene/geometry-src/orthographic-camera.d.ts.map +1 -0
  349. package/dist/scene/geometry-src/orthographic-camera.js +9 -0
  350. package/dist/scene/geometry-src/orthographic-camera.js.map +1 -0
  351. package/dist/scene/geometry-src/perspective-camera.d.ts +12 -0
  352. package/dist/scene/geometry-src/perspective-camera.d.ts.map +1 -0
  353. package/dist/scene/geometry-src/perspective-camera.js +9 -0
  354. package/dist/scene/geometry-src/perspective-camera.js.map +1 -0
  355. package/dist/scene/geometry-src/plane-data.d.ts +12 -0
  356. package/dist/scene/geometry-src/plane-data.d.ts.map +1 -0
  357. package/dist/scene/geometry-src/plane-data.js +25 -0
  358. package/dist/scene/geometry-src/plane-data.js.map +1 -0
  359. package/dist/scene/geometry-src/polyhedron-data.d.ts +7 -0
  360. package/dist/scene/geometry-src/polyhedron-data.d.ts.map +1 -0
  361. package/dist/scene/geometry-src/polyhedron-data.js +42 -0
  362. package/dist/scene/geometry-src/polyhedron-data.js.map +1 -0
  363. package/dist/scene/geometry-src/polyhedron-mesh.d.ts +10 -0
  364. package/dist/scene/geometry-src/polyhedron-mesh.d.ts.map +1 -0
  365. package/dist/scene/geometry-src/polyhedron-mesh.js +37 -0
  366. package/dist/scene/geometry-src/polyhedron-mesh.js.map +1 -0
  367. package/dist/scene/geometry-src/polyhedron-seeds.d.ts +6 -0
  368. package/dist/scene/geometry-src/polyhedron-seeds.d.ts.map +1 -0
  369. package/dist/scene/geometry-src/polyhedron-seeds.js +51 -0
  370. package/dist/scene/geometry-src/polyhedron-seeds.js.map +1 -0
  371. package/dist/scene/geometry-src/primitive-data-utils.d.ts +9 -0
  372. package/dist/scene/geometry-src/primitive-data-utils.d.ts.map +1 -0
  373. package/dist/scene/geometry-src/primitive-data-utils.js +36 -0
  374. package/dist/scene/geometry-src/primitive-data-utils.js.map +1 -0
  375. package/dist/scene/geometry-src/ring-data.d.ts +13 -0
  376. package/dist/scene/geometry-src/ring-data.d.ts.map +1 -0
  377. package/dist/scene/geometry-src/ring-data.js +24 -0
  378. package/dist/scene/geometry-src/ring-data.js.map +1 -0
  379. package/dist/scene/geometry-src/sphere-data.d.ts +11 -0
  380. package/dist/scene/geometry-src/sphere-data.d.ts.map +1 -0
  381. package/dist/scene/geometry-src/sphere-data.js +31 -0
  382. package/dist/scene/geometry-src/sphere-data.js.map +1 -0
  383. package/dist/scene/geometry-src/srgb.d.ts +5 -0
  384. package/dist/scene/geometry-src/srgb.d.ts.map +1 -0
  385. package/dist/scene/geometry-src/srgb.js +23 -0
  386. package/dist/scene/geometry-src/srgb.js.map +1 -0
  387. package/dist/scene/geometry-src/torus-data.d.ts +11 -0
  388. package/dist/scene/geometry-src/torus-data.d.ts.map +1 -0
  389. package/dist/scene/geometry-src/torus-data.js +38 -0
  390. package/dist/scene/geometry-src/torus-data.js.map +1 -0
  391. package/dist/scene/geometry-src/vertex-layout.d.ts +2 -0
  392. package/dist/scene/geometry-src/vertex-layout.d.ts.map +1 -0
  393. package/dist/scene/geometry-src/vertex-layout.js +2 -0
  394. package/dist/scene/geometry-src/vertex-layout.js.map +1 -0
  395. package/dist/scene/geometry.d.ts +70 -0
  396. package/dist/scene/geometry.d.ts.map +1 -0
  397. package/dist/scene/geometry.js +71 -0
  398. package/dist/scene/geometry.js.map +1 -0
  399. package/dist/scene/orbit.d.ts +9 -0
  400. package/dist/scene/orbit.d.ts.map +1 -0
  401. package/dist/scene/orbit.js +15 -0
  402. package/dist/scene/orbit.js.map +1 -0
  403. package/dist/scene/tree/errors.d.ts +4 -0
  404. package/dist/scene/tree/errors.d.ts.map +1 -0
  405. package/dist/scene/tree/errors.js +19 -0
  406. package/dist/scene/tree/errors.js.map +1 -0
  407. package/dist/scene/tree/light.d.ts +42 -0
  408. package/dist/scene/tree/light.d.ts.map +1 -0
  409. package/dist/scene/tree/light.js +102 -0
  410. package/dist/scene/tree/light.js.map +1 -0
  411. package/dist/scene/tree/material.d.ts +79 -0
  412. package/dist/scene/tree/material.d.ts.map +1 -0
  413. package/dist/scene/tree/material.js +117 -0
  414. package/dist/scene/tree/material.js.map +1 -0
  415. package/dist/scene/tree/math.d.ts +26 -0
  416. package/dist/scene/tree/math.d.ts.map +1 -0
  417. package/dist/scene/tree/math.js +217 -0
  418. package/dist/scene/tree/math.js.map +1 -0
  419. package/dist/scene/tree/mesh-node.d.ts +17 -0
  420. package/dist/scene/tree/mesh-node.d.ts.map +1 -0
  421. package/dist/scene/tree/mesh-node.js +24 -0
  422. package/dist/scene/tree/mesh-node.js.map +1 -0
  423. package/dist/scene/tree/node.d.ts +70 -0
  424. package/dist/scene/tree/node.d.ts.map +1 -0
  425. package/dist/scene/tree/node.js +220 -0
  426. package/dist/scene/tree/node.js.map +1 -0
  427. package/dist/scene/tree/orbit-controls.d.ts +69 -0
  428. package/dist/scene/tree/orbit-controls.d.ts.map +1 -0
  429. package/dist/scene/tree/orbit-controls.js +226 -0
  430. package/dist/scene/tree/orbit-controls.js.map +1 -0
  431. package/dist/scene.d.ts +21 -0
  432. package/dist/scene.d.ts.map +1 -0
  433. package/dist/scene.js +11 -0
  434. package/dist/scene.js.map +1 -0
  435. package/dist/set-core.d.ts +50 -0
  436. package/dist/set-core.d.ts.map +1 -0
  437. package/dist/set-core.js +268 -0
  438. package/dist/set-core.js.map +1 -0
  439. package/dist/set-layouts.d.ts +20 -0
  440. package/dist/set-layouts.d.ts.map +1 -0
  441. package/dist/set-layouts.js +103 -0
  442. package/dist/set-layouts.js.map +1 -0
  443. package/dist/set-packing.d.ts +4 -0
  444. package/dist/set-packing.d.ts.map +1 -0
  445. package/dist/set-packing.js +82 -0
  446. package/dist/set-packing.js.map +1 -0
  447. package/dist/set-resources.d.ts +20 -0
  448. package/dist/set-resources.d.ts.map +1 -0
  449. package/dist/set-resources.js +140 -0
  450. package/dist/set-resources.js.map +1 -0
  451. package/dist/shader-source.d.ts +4 -0
  452. package/dist/shader-source.d.ts.map +1 -0
  453. package/dist/shader-source.js +21 -0
  454. package/dist/shader-source.js.map +1 -0
  455. package/dist/storage.d.ts +38 -0
  456. package/dist/storage.d.ts.map +1 -0
  457. package/dist/storage.js +76 -0
  458. package/dist/storage.js.map +1 -0
  459. package/dist/surface.d.ts +89 -0
  460. package/dist/surface.d.ts.map +1 -0
  461. package/dist/surface.js +243 -0
  462. package/dist/surface.js.map +1 -0
  463. package/dist/target-offscreen.d.ts +41 -0
  464. package/dist/target-offscreen.d.ts.map +1 -0
  465. package/dist/target-offscreen.js +115 -0
  466. package/dist/target-offscreen.js.map +1 -0
  467. package/dist/target-utils.d.ts +37 -0
  468. package/dist/target-utils.d.ts.map +1 -0
  469. package/dist/target-utils.js +103 -0
  470. package/dist/target-utils.js.map +1 -0
  471. package/dist/target.d.ts +65 -0
  472. package/dist/target.d.ts.map +1 -0
  473. package/dist/target.js +2 -0
  474. package/dist/target.js.map +1 -0
  475. package/dist/timer.d.ts +78 -0
  476. package/dist/timer.d.ts.map +1 -0
  477. package/dist/timer.js +261 -0
  478. package/dist/timer.js.map +1 -0
  479. package/dist/uniforms-layout.d.ts +8 -0
  480. package/dist/uniforms-layout.d.ts.map +1 -0
  481. package/dist/uniforms-layout.js +84 -0
  482. package/dist/uniforms-layout.js.map +1 -0
  483. package/dist/uniforms.d.ts +43 -0
  484. package/dist/uniforms.d.ts.map +1 -0
  485. package/dist/uniforms.js +176 -0
  486. package/dist/uniforms.js.map +1 -0
  487. package/dist/visibility.d.ts +118 -0
  488. package/dist/visibility.d.ts.map +1 -0
  489. package/dist/visibility.js +290 -0
  490. package/dist/visibility.js.map +1 -0
  491. package/package.json +131 -0
@@ -0,0 +1,220 @@
1
+ import { sceneCycleError, sceneValueError } from "./errors.js";
2
+ import { composeTrs, copyMat4, identityMat4, invertAffineMat4, multiplyMat4, quatFromEuler, quatLookAt, transformDirection, transformPoint, } from "./math.js";
3
+ const UP = new Float32Array([0, 1, 0]);
4
+ const TMP_EYE = new Float32Array(3);
5
+ const TMP_TARGET = new Float32Array(3);
6
+ const TMP_UP = new Float32Array(3);
7
+ const TMP_PARENT_INVERSE = new Float32Array(16);
8
+ /**
9
+ * Base scene-tree node: a TRS transform with parent/children links. Mutation goes through
10
+ * `set()` so world matrices are recomputed lazily and only for dirty subtrees; the exposed
11
+ * arrays keep a stable identity and are updated in place.
12
+ */
13
+ export class SceneNode {
14
+ kind;
15
+ label;
16
+ visible = true;
17
+ #position = new Float32Array(3);
18
+ #quaternion = new Float32Array([0, 0, 0, 1]);
19
+ #scale = new Float32Array([1, 1, 1]);
20
+ #localMatrix = identityMat4(new Float32Array(16));
21
+ #worldMatrix = identityMat4(new Float32Array(16));
22
+ #worldPosition = new Float32Array(3);
23
+ #localDirty = false;
24
+ #worldDirty = false;
25
+ #parent = null;
26
+ #children = [];
27
+ _worldVersion = 0;
28
+ constructor(kind, options = {}) {
29
+ this.kind = kind;
30
+ this.label = options.label;
31
+ // Non-virtual application: subclass `set()` overrides touch subclass fields that are
32
+ // not installed yet while the base constructor runs.
33
+ this.#applyTransform(options);
34
+ if (options.children)
35
+ this.add(...options.children);
36
+ }
37
+ /** Updates transform components in place; unspecified components are left untouched. */
38
+ set(values) {
39
+ this.#applyTransform(values);
40
+ return this;
41
+ }
42
+ #applyTransform(values) {
43
+ const where = `${this.label ?? this.kind}.set`;
44
+ let transformTouched = false;
45
+ if (values.position !== undefined) {
46
+ writeVec3(this.#position, values.position, "position", where);
47
+ transformTouched = true;
48
+ }
49
+ if (values.quaternion !== undefined) {
50
+ if (values.quaternion.length !== 4)
51
+ throw sceneValueError(where, "quaternion", "an array of 4 numbers (x, y, z, w)");
52
+ this.#quaternion[0] = values.quaternion[0];
53
+ this.#quaternion[1] = values.quaternion[1];
54
+ this.#quaternion[2] = values.quaternion[2];
55
+ this.#quaternion[3] = values.quaternion[3];
56
+ transformTouched = true;
57
+ }
58
+ else if (values.rotation !== undefined) {
59
+ if (values.rotation.length !== 3)
60
+ throw sceneValueError(where, "rotation", "an array of 3 Euler angles in radians");
61
+ quatFromEuler(this.#quaternion, values.rotation[0], values.rotation[1], values.rotation[2]);
62
+ transformTouched = true;
63
+ }
64
+ if (values.scale !== undefined) {
65
+ if (typeof values.scale === "number") {
66
+ this.#scale.fill(values.scale);
67
+ }
68
+ else {
69
+ writeVec3(this.#scale, values.scale, "scale", where);
70
+ }
71
+ transformTouched = true;
72
+ }
73
+ if (values.visible !== undefined)
74
+ this.visible = values.visible;
75
+ if (values.label !== undefined)
76
+ this.label = values.label;
77
+ if (transformTouched)
78
+ this.#markTransformDirty();
79
+ }
80
+ /**
81
+ * Rotates the node so its -Z axis points at a world-space target.
82
+ *
83
+ * The whole computation runs in parent space (the target and up hint are pulled through
84
+ * the parent's affine inverse), which stays exact under non-uniform parent scale: an
85
+ * affine map sends the parent-space ray through the target to the world-space ray through
86
+ * the world target. Extracting a scale-stripped parent rotation instead — as an earlier
87
+ * version did — skews the forward vector whenever the parent scale is anisotropic.
88
+ */
89
+ lookAt(target, up = UP) {
90
+ const where = `${this.label ?? this.kind}.lookAt`;
91
+ writeVec3(TMP_TARGET, target, "target", where);
92
+ writeVec3(TMP_UP, up, "up", where);
93
+ TMP_EYE.set(this.#position);
94
+ const parent = this.#parent;
95
+ if (parent) {
96
+ invertAffineMat4(TMP_PARENT_INVERSE, parent.worldMatrix);
97
+ transformPoint(TMP_TARGET, TMP_PARENT_INVERSE, TMP_TARGET);
98
+ transformDirection(TMP_UP, TMP_PARENT_INVERSE, TMP_UP);
99
+ }
100
+ quatLookAt(this.#quaternion, TMP_EYE, TMP_TARGET, TMP_UP);
101
+ this.#markTransformDirty();
102
+ return this;
103
+ }
104
+ /** Adds children, reparenting them if needed. Throws `AIGPU-SCENE-CYCLE` on cycles. */
105
+ add(...nodes) {
106
+ const where = `${this.label ?? this.kind}.add`;
107
+ for (const node of nodes) {
108
+ for (let ancestor = this; ancestor; ancestor = ancestor.#parent) {
109
+ if (ancestor === node)
110
+ throw sceneCycleError(where, node.label ?? node.kind);
111
+ }
112
+ if (node.#parent)
113
+ node.#parent.#removeChild(node);
114
+ node.#parent = this;
115
+ this.#children.push(node);
116
+ node.#markWorldDirty();
117
+ }
118
+ return this;
119
+ }
120
+ /** Removes direct children; nodes that are not children are ignored. */
121
+ remove(...nodes) {
122
+ for (const node of nodes) {
123
+ if (node.#parent === this)
124
+ this.#removeChild(node);
125
+ }
126
+ return this;
127
+ }
128
+ /** Detaches this node from its parent, keeping its local transform. */
129
+ removeFromParent() {
130
+ if (this.#parent)
131
+ this.#parent.#removeChild(this);
132
+ return this;
133
+ }
134
+ /** Depth-first visit of this node and all descendants. */
135
+ traverse(visit) {
136
+ visit(this);
137
+ for (const child of this.#children)
138
+ child.traverse(visit);
139
+ }
140
+ get parent() {
141
+ return this.#parent;
142
+ }
143
+ get children() {
144
+ return this.#children;
145
+ }
146
+ /** Local position. Stable array identity; mutate via `set()`. */
147
+ get position() {
148
+ return this.#position;
149
+ }
150
+ /** Local rotation quaternion (x, y, z, w). Stable array identity; mutate via `set()`. */
151
+ get quaternion() {
152
+ return this.#quaternion;
153
+ }
154
+ /** Local scale. Stable array identity; mutate via `set()`. */
155
+ get scale() {
156
+ return this.#scale;
157
+ }
158
+ /** Column-major local TRS matrix, recomputed lazily. Stable array identity. */
159
+ get localMatrix() {
160
+ if (this.#localDirty) {
161
+ composeTrs(this.#localMatrix, this.#position, this.#quaternion, this.#scale);
162
+ this.#localDirty = false;
163
+ }
164
+ return this.#localMatrix;
165
+ }
166
+ /** Column-major world matrix, recomputed lazily for dirty subtrees. Stable array identity. */
167
+ get worldMatrix() {
168
+ if (this.#worldDirty || this.#localDirty) {
169
+ const local = this.localMatrix;
170
+ const parent = this.#parent;
171
+ if (parent) {
172
+ multiplyMat4(this.#worldMatrix, parent.worldMatrix, local);
173
+ }
174
+ else {
175
+ copyMat4(this.#worldMatrix, local);
176
+ }
177
+ this.#worldDirty = false;
178
+ this._worldVersion++;
179
+ }
180
+ return this.#worldMatrix;
181
+ }
182
+ /** World-space position derived from `worldMatrix`. Stable array identity. */
183
+ get worldPosition() {
184
+ const world = this.worldMatrix;
185
+ this.#worldPosition[0] = world[12];
186
+ this.#worldPosition[1] = world[13];
187
+ this.#worldPosition[2] = world[14];
188
+ return this.#worldPosition;
189
+ }
190
+ #markTransformDirty() {
191
+ this.#localDirty = true;
192
+ this.#markWorldDirty(true);
193
+ }
194
+ #markWorldDirty(force = false) {
195
+ if (this.#worldDirty && !force)
196
+ return;
197
+ this.#worldDirty = true;
198
+ for (const child of this.#children)
199
+ child.#markWorldDirty();
200
+ }
201
+ #removeChild(node) {
202
+ const index = this.#children.indexOf(node);
203
+ if (index >= 0)
204
+ this.#children.splice(index, 1);
205
+ node.#parent = null;
206
+ node.#markWorldDirty(true);
207
+ }
208
+ }
209
+ /** Creates a plain transform node used to group children. */
210
+ export function group(options = {}) {
211
+ return new SceneNode("group", options);
212
+ }
213
+ function writeVec3(out, value, name, where) {
214
+ if (value.length !== 3)
215
+ throw sceneValueError(where, name, "an array of 3 numbers");
216
+ out[0] = value[0];
217
+ out[1] = value[1];
218
+ out[2] = value[2];
219
+ }
220
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/scene/tree/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { SceneNode, Vec3Like } from "./node.ts";
2
+ /**
3
+ * Structural event-target contract so controls work with an `HTMLCanvasElement` without
4
+ * requiring DOM types, and with mocks in Node tests. Listener parameters are intentionally
5
+ * loose (`any`) so the DOM's overloaded `addEventListener` stays assignable.
6
+ */
7
+ export interface OrbitControlsElement {
8
+ addEventListener(type: string, listener: (event: any) => void, options?: {
9
+ passive?: boolean;
10
+ } | boolean): void;
11
+ removeEventListener(type: string, listener: (event: any) => void): void;
12
+ setPointerCapture?(pointerId: number): void;
13
+ releasePointerCapture?(pointerId: number): void;
14
+ }
15
+ export interface OrbitControlsOptions {
16
+ /** Pointer/wheel event source (usually the canvas). Omit for programmatic-only control. */
17
+ readonly element?: OrbitControlsElement;
18
+ /** World-space point the camera orbits and looks at. Defaults to `[0, 0, 0]`. */
19
+ readonly target?: Vec3Like;
20
+ /** Easing time constant in seconds (~63% convergence). `0` applies input immediately. */
21
+ readonly damping?: number;
22
+ /** Drag sensitivity in radians per pixel. */
23
+ readonly rotateSpeed?: number;
24
+ /** Wheel zoom sensitivity multiplier. */
25
+ readonly zoomSpeed?: number;
26
+ readonly distance?: {
27
+ readonly min?: number;
28
+ readonly max?: number;
29
+ };
30
+ /** Pitch limits in radians. Defaults keep the camera off the poles. */
31
+ readonly pitch?: {
32
+ readonly min?: number;
33
+ readonly max?: number;
34
+ };
35
+ readonly label?: string;
36
+ }
37
+ export interface OrbitControlsValues {
38
+ readonly yaw?: number;
39
+ readonly pitch?: number;
40
+ readonly distance?: number;
41
+ readonly target?: Vec3Like;
42
+ }
43
+ /**
44
+ * Shared drag-orbit + wheel-zoom controls around a target point. Input adjusts goal values;
45
+ * `update(deltaTime)` eases the current state toward them and writes the node's transform,
46
+ * so it composes with `frame.loop` and on-demand rendering alike.
47
+ */
48
+ export declare class OrbitControls {
49
+ #private;
50
+ readonly label: string | undefined;
51
+ constructor(node: SceneNode, options?: OrbitControlsOptions);
52
+ /** Jumps yaw/pitch/distance/target immediately (both current state and goal). */
53
+ set(values: OrbitControlsValues): this;
54
+ /**
55
+ * Eases toward the goal state and writes the node transform. Returns true when the node
56
+ * moved — useful to skip re-rendering static frames.
57
+ */
58
+ update(deltaTime?: number): boolean;
59
+ get yaw(): number;
60
+ get pitch(): number;
61
+ get distance(): number;
62
+ /** Orbit target. Stable array identity; mutate via `set()`. */
63
+ get target(): Float32Array;
64
+ /** Removes event listeners. The node keeps its last transform. */
65
+ dispose(): void;
66
+ }
67
+ /** Creates drag-orbit + wheel-zoom controls that drive a camera (or any node). */
68
+ export declare function orbitControls(node: SceneNode, options?: OrbitControlsOptions): OrbitControls;
69
+ //# sourceMappingURL=orbit-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbit-controls.d.ts","sourceRoot":"","sources":["../../../src/scene/tree/orbit-controls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAcrD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IAEnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,IAAI,CAAC;IAChH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACxE,iBAAiB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,qBAAqB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,oBAAoB;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;CAC5B;AAOD;;;;GAIG;AACH,qBAAa,aAAa;;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;gBAsDvB,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB;IAqC/D,iFAAiF;IACjF,GAAG,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IActC;;;OAGG;IACH,MAAM,CAAC,SAAS,SAAqB,GAAG,OAAO;IA0C/C,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,+DAA+D;IAC/D,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,kEAAkE;IAClE,OAAO,IAAI,IAAI;CA6BhB;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAEhG"}
@@ -0,0 +1,226 @@
1
+ import { sceneValueError } from "./errors.js";
2
+ import { invertAffineMat4, transformPoint } from "./math.js";
3
+ const MAX_PITCH_DEFAULT = Math.PI / 2 - 0.01;
4
+ const EPSILON = 1e-6;
5
+ const DEFAULT_DELTA_TIME = 1 / 60;
6
+ const TMP_PARENT_INVERSE = new Float32Array(16);
7
+ /**
8
+ * Shared drag-orbit + wheel-zoom controls around a target point. Input adjusts goal values;
9
+ * `update(deltaTime)` eases the current state toward them and writes the node's transform,
10
+ * so it composes with `frame.loop` and on-demand rendering alike.
11
+ */
12
+ export class OrbitControls {
13
+ label;
14
+ #node;
15
+ #element;
16
+ #target = new Float32Array(3);
17
+ #localTarget = new Float32Array(3);
18
+ #yaw = 0;
19
+ #pitch = 0;
20
+ #distance = 1;
21
+ #goalYaw = 0;
22
+ #goalPitch = 0;
23
+ #goalDistance = 1;
24
+ #damping;
25
+ #rotateSpeed;
26
+ #zoomSpeed;
27
+ #minDistance;
28
+ #maxDistance;
29
+ #minPitch;
30
+ #maxPitch;
31
+ #dragging = false;
32
+ #lastX = 0;
33
+ #lastY = 0;
34
+ #applied = false;
35
+ #disposed = false;
36
+ #onPointerDown = (event) => {
37
+ if (event.button !== 0)
38
+ return;
39
+ this.#dragging = true;
40
+ this.#lastX = event.clientX;
41
+ this.#lastY = event.clientY;
42
+ this.#element?.setPointerCapture?.(event.pointerId);
43
+ };
44
+ #onPointerMove = (event) => {
45
+ if (!this.#dragging)
46
+ return;
47
+ const dx = event.clientX - this.#lastX;
48
+ const dy = event.clientY - this.#lastY;
49
+ this.#lastX = event.clientX;
50
+ this.#lastY = event.clientY;
51
+ this.#goalYaw -= dx * this.#rotateSpeed;
52
+ this.#goalPitch = clamp(this.#goalPitch + dy * this.#rotateSpeed, this.#minPitch, this.#maxPitch);
53
+ };
54
+ #onPointerUp = (event) => {
55
+ this.#dragging = false;
56
+ this.#element?.releasePointerCapture?.(event.pointerId);
57
+ };
58
+ #onWheel = (event) => {
59
+ event.preventDefault();
60
+ const factor = Math.exp(event.deltaY * 0.001 * this.#zoomSpeed);
61
+ this.#goalDistance = clamp(this.#goalDistance * factor, this.#minDistance, this.#maxDistance);
62
+ };
63
+ constructor(node, options = {}) {
64
+ this.#node = node;
65
+ this.label = options.label;
66
+ this.#damping = options.damping ?? 0.1;
67
+ this.#rotateSpeed = options.rotateSpeed ?? 0.005;
68
+ this.#zoomSpeed = options.zoomSpeed ?? 1;
69
+ this.#minDistance = options.distance?.min ?? EPSILON;
70
+ this.#maxDistance = options.distance?.max ?? Infinity;
71
+ this.#minPitch = options.pitch?.min ?? -MAX_PITCH_DEFAULT;
72
+ this.#maxPitch = options.pitch?.max ?? MAX_PITCH_DEFAULT;
73
+ if (options.target !== undefined)
74
+ writeVec3(this.#target, options.target, "target", this.label ?? "orbitControls");
75
+ // Derive the initial spherical pose from the node's current position. Both operands
76
+ // live in the node's parent space, so the world target is pulled into it first.
77
+ const target = this.#targetInNodeSpace();
78
+ const ox = node.position[0] - target[0];
79
+ const oy = node.position[1] - target[1];
80
+ const oz = node.position[2] - target[2];
81
+ const length = Math.hypot(ox, oy, oz);
82
+ this.#distance = clamp(length > 0 ? length : 1, this.#minDistance, this.#maxDistance);
83
+ this.#yaw = length > 0 ? Math.atan2(ox, oz) : 0;
84
+ this.#pitch = length > 0 ? clamp(Math.asin(oy / length), this.#minPitch, this.#maxPitch) : 0;
85
+ this.#goalYaw = this.#yaw;
86
+ this.#goalPitch = this.#pitch;
87
+ this.#goalDistance = this.#distance;
88
+ const element = options.element;
89
+ if (element) {
90
+ this.#element = element;
91
+ element.addEventListener("pointerdown", this.#onPointerDown);
92
+ element.addEventListener("pointermove", this.#onPointerMove);
93
+ element.addEventListener("pointerup", this.#onPointerUp);
94
+ element.addEventListener("pointercancel", this.#onPointerUp);
95
+ element.addEventListener("wheel", this.#onWheel, { passive: false });
96
+ }
97
+ }
98
+ /** Jumps yaw/pitch/distance/target immediately (both current state and goal). */
99
+ set(values) {
100
+ const where = this.#where("set");
101
+ // Validate everything up front: a NaN that reaches the state can never be eased out.
102
+ if (values.yaw !== undefined)
103
+ requireFinite(where, "yaw", values.yaw);
104
+ if (values.pitch !== undefined)
105
+ requireFinite(where, "pitch", values.pitch);
106
+ if (values.distance !== undefined)
107
+ requireFinite(where, "distance", values.distance);
108
+ if (values.target !== undefined)
109
+ writeVec3(this.#target, values.target, "target", where);
110
+ if (values.yaw !== undefined)
111
+ this.#yaw = this.#goalYaw = values.yaw;
112
+ if (values.pitch !== undefined)
113
+ this.#pitch = this.#goalPitch = clamp(values.pitch, this.#minPitch, this.#maxPitch);
114
+ if (values.distance !== undefined)
115
+ this.#distance = this.#goalDistance = clamp(values.distance, this.#minDistance, this.#maxDistance);
116
+ this.#applied = false;
117
+ return this;
118
+ }
119
+ /**
120
+ * Eases toward the goal state and writes the node transform. Returns true when the node
121
+ * moved — useful to skip re-rendering static frames.
122
+ */
123
+ update(deltaTime = DEFAULT_DELTA_TIME) {
124
+ // A non-finite dt (the classic first-frame `performance.now()` delta) would otherwise
125
+ // write NaN into yaw/pitch/distance permanently: NaN < EPSILON is false, so the snap
126
+ // rescue below never fires and the state can never recover.
127
+ const dt = Number.isFinite(deltaTime) ? Math.max(deltaTime, 0) : DEFAULT_DELTA_TIME;
128
+ const position = this.#node.position;
129
+ const gap = Math.max(Math.abs(this.#goalYaw - this.#yaw), Math.abs(this.#goalPitch - this.#pitch), Math.abs(this.#goalDistance - this.#distance));
130
+ const settled = gap < EPSILON && this.#applied;
131
+ if (!settled) {
132
+ const t = this.#damping > 0 ? 1 - Math.exp(-dt / this.#damping) : 1;
133
+ this.#yaw += (this.#goalYaw - this.#yaw) * t;
134
+ this.#pitch += (this.#goalPitch - this.#pitch) * t;
135
+ this.#distance += (this.#goalDistance - this.#distance) * t;
136
+ if (gap < EPSILON) {
137
+ this.#yaw = this.#goalYaw;
138
+ this.#pitch = this.#goalPitch;
139
+ this.#distance = this.#goalDistance;
140
+ }
141
+ }
142
+ const cosPitch = Math.cos(this.#pitch);
143
+ // `node.position` is parent-local, so the orbit is built around the target expressed in
144
+ // that same space; `lookAt()` takes the world target (it does its own parent transform).
145
+ const target = this.#targetInNodeSpace();
146
+ const x = target[0] + Math.sin(this.#yaw) * cosPitch * this.#distance;
147
+ const y = target[1] + Math.sin(this.#pitch) * this.#distance;
148
+ const z = target[2] + Math.cos(this.#yaw) * cosPitch * this.#distance;
149
+ // A settled state still has to be re-applied when the rig above the node moved, which
150
+ // changes where the world target sits in parent space. `position` holds exactly what a
151
+ // previous write rounded to, so `fround` compares without a tolerance.
152
+ if (settled && Math.fround(x) === position[0] && Math.fround(y) === position[1] && Math.fround(z) === position[2]) {
153
+ return false;
154
+ }
155
+ this.#node.set({ position: [x, y, z] });
156
+ this.#node.lookAt(this.#target);
157
+ this.#applied = true;
158
+ return true;
159
+ }
160
+ get yaw() {
161
+ return this.#yaw;
162
+ }
163
+ get pitch() {
164
+ return this.#pitch;
165
+ }
166
+ get distance() {
167
+ return this.#distance;
168
+ }
169
+ /** Orbit target. Stable array identity; mutate via `set()`. */
170
+ get target() {
171
+ return this.#target;
172
+ }
173
+ /** Removes event listeners. The node keeps its last transform. */
174
+ dispose() {
175
+ if (this.#disposed)
176
+ return;
177
+ this.#disposed = true;
178
+ const element = this.#element;
179
+ if (element) {
180
+ element.removeEventListener("pointerdown", this.#onPointerDown);
181
+ element.removeEventListener("pointermove", this.#onPointerMove);
182
+ element.removeEventListener("pointerup", this.#onPointerUp);
183
+ element.removeEventListener("pointercancel", this.#onPointerUp);
184
+ element.removeEventListener("wheel", this.#onWheel);
185
+ }
186
+ this.#element = undefined;
187
+ }
188
+ #where(method) {
189
+ return `${this.label ?? "orbitControls"}.${method}`;
190
+ }
191
+ /**
192
+ * The world-space target expressed in the node's parent space, which is the space
193
+ * `node.position` lives in. Recomputed per call because the rig above the node may move
194
+ * between frames. Returns the world target unchanged for unparented nodes.
195
+ */
196
+ #targetInNodeSpace() {
197
+ const parent = this.#node.parent;
198
+ if (!parent)
199
+ return this.#target;
200
+ invertAffineMat4(TMP_PARENT_INVERSE, parent.worldMatrix);
201
+ return transformPoint(this.#localTarget, TMP_PARENT_INVERSE, this.#target);
202
+ }
203
+ }
204
+ /** Creates drag-orbit + wheel-zoom controls that drive a camera (or any node). */
205
+ export function orbitControls(node, options = {}) {
206
+ return new OrbitControls(node, options);
207
+ }
208
+ function clamp(value, min, max) {
209
+ return Math.min(Math.max(value, min), max);
210
+ }
211
+ function requireFinite(where, name, value) {
212
+ if (!Number.isFinite(value))
213
+ throw sceneValueError(where, name, "a finite number");
214
+ }
215
+ function writeVec3(out, value, name, where) {
216
+ if (value.length !== 3)
217
+ throw sceneValueError(where, name, "an array of 3 numbers");
218
+ for (let i = 0; i < 3; i++) {
219
+ if (!Number.isFinite(value[i]))
220
+ throw sceneValueError(where, name, "an array of 3 finite numbers");
221
+ }
222
+ out[0] = value[0];
223
+ out[1] = value[1];
224
+ out[2] = value[2];
225
+ }
226
+ //# sourceMappingURL=orbit-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbit-controls.js","sourceRoot":"","sources":["../../../src/scene/tree/orbit-controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export { box, capsule, cone, cylinder, disk, dodecahedron, fullscreenQuad, icosahedron, icosphere, octahedron, plane, ring, sphere, tetrahedron, torus, } from "./scene/geometry.ts";
2
+ export { geometries } from "./scene/geometries.ts";
3
+ export type { BoxOptions, CapsuleOptions, ConeOptions, CylinderOptions, DiskOptions, FullscreenQuadOptions, GeometryKind, IcosphereOptions, PlaneOptions, PolyhedronOptions, RingOptions, SceneGeometry, SceneGeometryOfKind, SphereOptions, TorusOptions, } from "./scene/geometry.ts";
4
+ export { degToRad, srgb } from "./scene/geometry-src/index.ts";
5
+ export { OrthographicCamera, orthographicCamera, PerspectiveCamera, perspectiveCamera } from "./scene/camera.ts";
6
+ export type { Camera, CameraVec3, OrthographicCameraOptions, OrthographicCameraValues, PerspectiveCameraOptions, PerspectiveCameraValues, SceneCamera, } from "./scene/camera.ts";
7
+ export { orbit } from "./scene/orbit.ts";
8
+ export type { Mat4, OrbitOptions } from "./scene/orbit.ts";
9
+ /** Three-component vector type accepted by low-level scene camera helpers. */
10
+ export type { Vec3 } from "./scene/geometry-src/index.ts";
11
+ export type { Geometry, GeometryAttributeOverride, GeometryAttributes, GeometryBuffer, GeometryBufferOptions, GeometryData, GeometryOptions, GeometrySlice, GeometrySliceOptions } from "./scene/geometry-descriptor.ts";
12
+ export { group, SceneNode } from "./scene/tree/node.ts";
13
+ export type { NodeOptions, NodeTransformValues, QuatLike, SceneNodeKind, Vec3Like } from "./scene/tree/node.ts";
14
+ export { mesh, MeshNode, scene } from "./scene/tree/mesh-node.ts";
15
+ export { LambertMaterial, lambertMaterial, NormalMaterial, normalMaterial, SceneMaterial, ShaderMaterial, shaderMaterial, UnlitMaterial, unlitMaterial, } from "./scene/tree/material.ts";
16
+ export type { ColorMaterialOptions, ColorMaterialValues, MaterialBlend, SceneMaterialKind, ShaderMaterialOptions } from "./scene/tree/material.ts";
17
+ export { AmbientLight, ambientLight, DirectionalLight, directionalLight } from "./scene/tree/light.ts";
18
+ export type { AmbientLightOptions, AmbientLightValues, DirectionalLightOptions, DirectionalLightValues } from "./scene/tree/light.ts";
19
+ export { OrbitControls, orbitControls } from "./scene/tree/orbit-controls.ts";
20
+ export type { OrbitControlsElement, OrbitControlsOptions, OrbitControlsValues } from "./scene/tree/orbit-controls.ts";
21
+ //# sourceMappingURL=scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,GACN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjH,YAAY,EACV,MAAM,EACN,UAAU,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,8EAA8E;AAC9E,YAAY,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACzN,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvG,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACtI,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/scene.js ADDED
@@ -0,0 +1,11 @@
1
+ export { box, capsule, cone, cylinder, disk, dodecahedron, fullscreenQuad, icosahedron, icosphere, octahedron, plane, ring, sphere, tetrahedron, torus, } from "./scene/geometry.js";
2
+ export { geometries } from "./scene/geometries.js";
3
+ export { degToRad, srgb } from "./scene/geometry-src/index.js";
4
+ export { OrthographicCamera, orthographicCamera, PerspectiveCamera, perspectiveCamera } from "./scene/camera.js";
5
+ export { orbit } from "./scene/orbit.js";
6
+ export { group, SceneNode } from "./scene/tree/node.js";
7
+ export { mesh, MeshNode, scene } from "./scene/tree/mesh-node.js";
8
+ export { LambertMaterial, lambertMaterial, NormalMaterial, normalMaterial, SceneMaterial, ShaderMaterial, shaderMaterial, UnlitMaterial, unlitMaterial, } from "./scene/tree/material.js";
9
+ export { AmbientLight, ambientLight, DirectionalLight, directionalLight } from "./scene/tree/light.js";
10
+ export { OrbitControls, orbitControls } from "./scene/tree/orbit-controls.js";
11
+ //# sourceMappingURL=scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,GACN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAkBnD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUjH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type Device } from "@aigpu/core";
2
+ import type { BindingInfo, Reflection } from "@aigpu/wgsl/reflect-source";
3
+ import { type BindGroupCache, type BindGroupIdentityPart } from "./bind-cache.ts";
4
+ export type SetBag = Record<string, unknown>;
5
+ export type BindingOwnership = "lib" | "user";
6
+ export interface SetCoreOptions {
7
+ readonly device: Device;
8
+ readonly label: string;
9
+ readonly drawId: number;
10
+ readonly reflection: Reflection;
11
+ readonly bindGroupLayouts: ReadonlyMap<number, GPUBindGroupLayout>;
12
+ readonly cache: BindGroupCache;
13
+ readonly onIdentityChange?: (change: BindingIdentityChange) => void;
14
+ }
15
+ export interface BindingIdentityChange {
16
+ readonly group: number;
17
+ readonly binding: number;
18
+ readonly bindingName: string;
19
+ readonly bindingKind: string;
20
+ readonly previousIdentity?: string;
21
+ readonly newIdentity: string;
22
+ }
23
+ /** Ring-1 set() engine: latches ownership, validates completeness, and returns cached bind groups. */
24
+ export interface SetCore {
25
+ readonly groups: readonly number[];
26
+ set(values: SetBag): readonly BindingIdentityChange[];
27
+ claimGroup(group: number, bindGroup: GPUBindGroup, expectedLayout: GPUBindGroupLayout): string | undefined;
28
+ layout(group: number): GPUBindGroupLayout;
29
+ bindGroups(): readonly {
30
+ readonly group: number;
31
+ readonly bindGroup: GPUBindGroup;
32
+ readonly offsets: readonly number[];
33
+ readonly claimValidation?: {
34
+ readonly label: string;
35
+ readonly group: number;
36
+ };
37
+ }[];
38
+ bindingState(name: string): BindingState | undefined;
39
+ }
40
+ export interface BindingState {
41
+ readonly info: BindingInfo;
42
+ readonly ownership: BindingOwnership;
43
+ readonly resource: GPUBindingResource;
44
+ readonly identity: BindGroupIdentityPart;
45
+ }
46
+ /** Creates the per-Draw binding state machine used by Effect/Draw.set(). */
47
+ export declare function createSetCore(options: SetCoreOptions): SetCore;
48
+ export { bindGroupLayoutEntriesForGroup, bindGroupLayoutsForReflection, pipelineLayoutFor } from "./set-layouts.ts";
49
+ export { writeLayoutValue } from "./set-packing.ts";
50
+ //# sourceMappingURL=set-core.d.ts.map