@vgpu/render 0.0.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 (426) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/dist/domain/camera.d.ts +10 -0
  4. package/dist/domain/camera.d.ts.map +1 -0
  5. package/dist/domain/camera.js +2 -0
  6. package/dist/domain/camera.js.map +1 -0
  7. package/dist/domain/capsule-data.d.ts +10 -0
  8. package/dist/domain/capsule-data.d.ts.map +1 -0
  9. package/dist/domain/capsule-data.js +61 -0
  10. package/dist/domain/capsule-data.js.map +1 -0
  11. package/dist/domain/cone-data.d.ts +13 -0
  12. package/dist/domain/cone-data.d.ts.map +1 -0
  13. package/dist/domain/cone-data.js +52 -0
  14. package/dist/domain/cone-data.js.map +1 -0
  15. package/dist/domain/cylinder-data.d.ts +14 -0
  16. package/dist/domain/cylinder-data.d.ts.map +1 -0
  17. package/dist/domain/cylinder-data.js +58 -0
  18. package/dist/domain/cylinder-data.js.map +1 -0
  19. package/dist/domain/deg-to-rad.d.ts +2 -0
  20. package/dist/domain/deg-to-rad.d.ts.map +1 -0
  21. package/dist/domain/deg-to-rad.js +4 -0
  22. package/dist/domain/deg-to-rad.js.map +1 -0
  23. package/dist/domain/disk-data.d.ts +12 -0
  24. package/dist/domain/disk-data.d.ts.map +1 -0
  25. package/dist/domain/disk-data.js +21 -0
  26. package/dist/domain/disk-data.js.map +1 -0
  27. package/dist/domain/icosphere-data.d.ts +8 -0
  28. package/dist/domain/icosphere-data.d.ts.map +1 -0
  29. package/dist/domain/icosphere-data.js +58 -0
  30. package/dist/domain/icosphere-data.js.map +1 -0
  31. package/dist/domain/index.d.ts +40 -0
  32. package/dist/domain/index.d.ts.map +1 -0
  33. package/dist/domain/index.js +23 -0
  34. package/dist/domain/index.js.map +1 -0
  35. package/dist/domain/material-factory.d.ts +34 -0
  36. package/dist/domain/material-factory.d.ts.map +1 -0
  37. package/dist/domain/material-factory.js +106 -0
  38. package/dist/domain/material-factory.js.map +1 -0
  39. package/dist/domain/material-sampler.d.ts +7 -0
  40. package/dist/domain/material-sampler.d.ts.map +1 -0
  41. package/dist/domain/material-sampler.js +11 -0
  42. package/dist/domain/material-sampler.js.map +1 -0
  43. package/dist/domain/material-textures-schema.d.ts +29 -0
  44. package/dist/domain/material-textures-schema.d.ts.map +1 -0
  45. package/dist/domain/material-textures-schema.js +57 -0
  46. package/dist/domain/material-textures-schema.js.map +1 -0
  47. package/dist/domain/material-textures.d.ts +13 -0
  48. package/dist/domain/material-textures.d.ts.map +1 -0
  49. package/dist/domain/material-textures.js +91 -0
  50. package/dist/domain/material-textures.js.map +1 -0
  51. package/dist/domain/material.d.ts +27 -0
  52. package/dist/domain/material.d.ts.map +1 -0
  53. package/dist/domain/material.js +2 -0
  54. package/dist/domain/material.js.map +1 -0
  55. package/dist/domain/mesh-box.d.ts +8 -0
  56. package/dist/domain/mesh-box.d.ts.map +1 -0
  57. package/dist/domain/mesh-box.js +57 -0
  58. package/dist/domain/mesh-box.js.map +1 -0
  59. package/dist/domain/mesh-cache.d.ts +4 -0
  60. package/dist/domain/mesh-cache.d.ts.map +1 -0
  61. package/dist/domain/mesh-cache.js +14 -0
  62. package/dist/domain/mesh-cache.js.map +1 -0
  63. package/dist/domain/mesh-capsule.d.ts +14 -0
  64. package/dist/domain/mesh-capsule.d.ts.map +1 -0
  65. package/dist/domain/mesh-capsule.js +52 -0
  66. package/dist/domain/mesh-capsule.js.map +1 -0
  67. package/dist/domain/mesh-cone.d.ts +16 -0
  68. package/dist/domain/mesh-cone.d.ts.map +1 -0
  69. package/dist/domain/mesh-cone.js +54 -0
  70. package/dist/domain/mesh-cone.js.map +1 -0
  71. package/dist/domain/mesh-cylinder.d.ts +18 -0
  72. package/dist/domain/mesh-cylinder.d.ts.map +1 -0
  73. package/dist/domain/mesh-cylinder.js +67 -0
  74. package/dist/domain/mesh-cylinder.js.map +1 -0
  75. package/dist/domain/mesh-disk.d.ts +11 -0
  76. package/dist/domain/mesh-disk.d.ts.map +1 -0
  77. package/dist/domain/mesh-disk.js +45 -0
  78. package/dist/domain/mesh-disk.js.map +1 -0
  79. package/dist/domain/mesh-dodecahedron.d.ts +4 -0
  80. package/dist/domain/mesh-dodecahedron.d.ts.map +1 -0
  81. package/dist/domain/mesh-dodecahedron.js +10 -0
  82. package/dist/domain/mesh-dodecahedron.js.map +1 -0
  83. package/dist/domain/mesh-fullscreen-quad.d.ts +7 -0
  84. package/dist/domain/mesh-fullscreen-quad.d.ts.map +1 -0
  85. package/dist/domain/mesh-fullscreen-quad.js +39 -0
  86. package/dist/domain/mesh-fullscreen-quad.js.map +1 -0
  87. package/dist/domain/mesh-icosahedron.d.ts +4 -0
  88. package/dist/domain/mesh-icosahedron.d.ts.map +1 -0
  89. package/dist/domain/mesh-icosahedron.js +10 -0
  90. package/dist/domain/mesh-icosahedron.js.map +1 -0
  91. package/dist/domain/mesh-icosphere.d.ts +11 -0
  92. package/dist/domain/mesh-icosphere.d.ts.map +1 -0
  93. package/dist/domain/mesh-icosphere.js +47 -0
  94. package/dist/domain/mesh-icosphere.js.map +1 -0
  95. package/dist/domain/mesh-octahedron.d.ts +4 -0
  96. package/dist/domain/mesh-octahedron.d.ts.map +1 -0
  97. package/dist/domain/mesh-octahedron.js +10 -0
  98. package/dist/domain/mesh-octahedron.js.map +1 -0
  99. package/dist/domain/mesh-plane.d.ts +13 -0
  100. package/dist/domain/mesh-plane.d.ts.map +1 -0
  101. package/dist/domain/mesh-plane.js +51 -0
  102. package/dist/domain/mesh-plane.js.map +1 -0
  103. package/dist/domain/mesh-ring.d.ts +12 -0
  104. package/dist/domain/mesh-ring.d.ts.map +1 -0
  105. package/dist/domain/mesh-ring.js +47 -0
  106. package/dist/domain/mesh-ring.js.map +1 -0
  107. package/dist/domain/mesh-sphere.d.ts +10 -0
  108. package/dist/domain/mesh-sphere.d.ts.map +1 -0
  109. package/dist/domain/mesh-sphere.js +51 -0
  110. package/dist/domain/mesh-sphere.js.map +1 -0
  111. package/dist/domain/mesh-tetrahedron.d.ts +5 -0
  112. package/dist/domain/mesh-tetrahedron.d.ts.map +1 -0
  113. package/dist/domain/mesh-tetrahedron.js +10 -0
  114. package/dist/domain/mesh-tetrahedron.js.map +1 -0
  115. package/dist/domain/mesh-torus.d.ts +17 -0
  116. package/dist/domain/mesh-torus.d.ts.map +1 -0
  117. package/dist/domain/mesh-torus.js +56 -0
  118. package/dist/domain/mesh-torus.js.map +1 -0
  119. package/dist/domain/mesh-types.d.ts +38 -0
  120. package/dist/domain/mesh-types.d.ts.map +1 -0
  121. package/dist/domain/mesh-types.js +2 -0
  122. package/dist/domain/mesh-types.js.map +1 -0
  123. package/dist/domain/mesh.d.ts +61 -0
  124. package/dist/domain/mesh.d.ts.map +1 -0
  125. package/dist/domain/mesh.js +49 -0
  126. package/dist/domain/mesh.js.map +1 -0
  127. package/dist/domain/orthographic-camera.d.ts +14 -0
  128. package/dist/domain/orthographic-camera.d.ts.map +1 -0
  129. package/dist/domain/orthographic-camera.js +10 -0
  130. package/dist/domain/orthographic-camera.js.map +1 -0
  131. package/dist/domain/perspective-camera.d.ts +12 -0
  132. package/dist/domain/perspective-camera.d.ts.map +1 -0
  133. package/dist/domain/perspective-camera.js +10 -0
  134. package/dist/domain/perspective-camera.js.map +1 -0
  135. package/dist/domain/plane-data.d.ts +12 -0
  136. package/dist/domain/plane-data.d.ts.map +1 -0
  137. package/dist/domain/plane-data.js +25 -0
  138. package/dist/domain/plane-data.js.map +1 -0
  139. package/dist/domain/polyhedron-data.d.ts +7 -0
  140. package/dist/domain/polyhedron-data.d.ts.map +1 -0
  141. package/dist/domain/polyhedron-data.js +42 -0
  142. package/dist/domain/polyhedron-data.js.map +1 -0
  143. package/dist/domain/polyhedron-mesh.d.ts +10 -0
  144. package/dist/domain/polyhedron-mesh.d.ts.map +1 -0
  145. package/dist/domain/polyhedron-mesh.js +37 -0
  146. package/dist/domain/polyhedron-mesh.js.map +1 -0
  147. package/dist/domain/polyhedron-seeds.d.ts +6 -0
  148. package/dist/domain/polyhedron-seeds.d.ts.map +1 -0
  149. package/dist/domain/polyhedron-seeds.js +51 -0
  150. package/dist/domain/polyhedron-seeds.js.map +1 -0
  151. package/dist/domain/primitive-data-utils.d.ts +9 -0
  152. package/dist/domain/primitive-data-utils.d.ts.map +1 -0
  153. package/dist/domain/primitive-data-utils.js +36 -0
  154. package/dist/domain/primitive-data-utils.js.map +1 -0
  155. package/dist/domain/ring-data.d.ts +13 -0
  156. package/dist/domain/ring-data.d.ts.map +1 -0
  157. package/dist/domain/ring-data.js +24 -0
  158. package/dist/domain/ring-data.js.map +1 -0
  159. package/dist/domain/sphere-data.d.ts +11 -0
  160. package/dist/domain/sphere-data.d.ts.map +1 -0
  161. package/dist/domain/sphere-data.js +31 -0
  162. package/dist/domain/sphere-data.js.map +1 -0
  163. package/dist/domain/srgb.d.ts +5 -0
  164. package/dist/domain/srgb.d.ts.map +1 -0
  165. package/dist/domain/srgb.js +11 -0
  166. package/dist/domain/srgb.js.map +1 -0
  167. package/dist/domain/torus-data.d.ts +11 -0
  168. package/dist/domain/torus-data.d.ts.map +1 -0
  169. package/dist/domain/torus-data.js +38 -0
  170. package/dist/domain/torus-data.js.map +1 -0
  171. package/dist/domain/vertex-layout.d.ts +3 -0
  172. package/dist/domain/vertex-layout.d.ts.map +1 -0
  173. package/dist/domain/vertex-layout.js +14 -0
  174. package/dist/domain/vertex-layout.js.map +1 -0
  175. package/dist/domain/wgsl-alignment.d.ts +17 -0
  176. package/dist/domain/wgsl-alignment.d.ts.map +1 -0
  177. package/dist/domain/wgsl-alignment.js +39 -0
  178. package/dist/domain/wgsl-alignment.js.map +1 -0
  179. package/dist/edit/edit-source.d.ts +10 -0
  180. package/dist/edit/edit-source.d.ts.map +1 -0
  181. package/dist/edit/edit-source.js +9 -0
  182. package/dist/edit/edit-source.js.map +1 -0
  183. package/dist/edit/editable-mesh.d.ts +11 -0
  184. package/dist/edit/editable-mesh.d.ts.map +1 -0
  185. package/dist/edit/editable-mesh.js +30 -0
  186. package/dist/edit/editable-mesh.js.map +1 -0
  187. package/dist/edit/element-set.d.ts +4 -0
  188. package/dist/edit/element-set.d.ts.map +1 -0
  189. package/dist/edit/element-set.js +78 -0
  190. package/dist/edit/element-set.js.map +1 -0
  191. package/dist/edit/errors.d.ts +11 -0
  192. package/dist/edit/errors.d.ts.map +1 -0
  193. package/dist/edit/errors.js +11 -0
  194. package/dist/edit/errors.js.map +1 -0
  195. package/dist/edit/half-edge-bake.d.ts +5 -0
  196. package/dist/edit/half-edge-bake.d.ts.map +1 -0
  197. package/dist/edit/half-edge-bake.js +30 -0
  198. package/dist/edit/half-edge-bake.js.map +1 -0
  199. package/dist/edit/half-edge-build.d.ts +4 -0
  200. package/dist/edit/half-edge-build.d.ts.map +1 -0
  201. package/dist/edit/half-edge-build.js +61 -0
  202. package/dist/edit/half-edge-build.js.map +1 -0
  203. package/dist/edit/half-edge-kernel.d.ts +21 -0
  204. package/dist/edit/half-edge-kernel.d.ts.map +1 -0
  205. package/dist/edit/half-edge-kernel.js +14 -0
  206. package/dist/edit/half-edge-kernel.js.map +1 -0
  207. package/dist/edit/half-edge-views.d.ts +8 -0
  208. package/dist/edit/half-edge-views.d.ts.map +1 -0
  209. package/dist/edit/half-edge-views.js +40 -0
  210. package/dist/edit/half-edge-views.js.map +1 -0
  211. package/dist/edit/index.d.ts +38 -0
  212. package/dist/edit/index.d.ts.map +1 -0
  213. package/dist/edit/index.js +20 -0
  214. package/dist/edit/index.js.map +1 -0
  215. package/dist/edit/kernel-handle.d.ts +5 -0
  216. package/dist/edit/kernel-handle.d.ts.map +1 -0
  217. package/dist/edit/kernel-handle.js +7 -0
  218. package/dist/edit/kernel-handle.js.map +1 -0
  219. package/dist/edit/operator-utils.d.ts +33 -0
  220. package/dist/edit/operator-utils.d.ts.map +1 -0
  221. package/dist/edit/operator-utils.js +101 -0
  222. package/dist/edit/operator-utils.js.map +1 -0
  223. package/dist/edit/operators/bevel.d.ts +18 -0
  224. package/dist/edit/operators/bevel.d.ts.map +1 -0
  225. package/dist/edit/operators/bevel.js +65 -0
  226. package/dist/edit/operators/bevel.js.map +1 -0
  227. package/dist/edit/operators/bridge.d.ts +14 -0
  228. package/dist/edit/operators/bridge.d.ts.map +1 -0
  229. package/dist/edit/operators/bridge.js +55 -0
  230. package/dist/edit/operators/bridge.js.map +1 -0
  231. package/dist/edit/operators/dissolve-edges.d.ts +12 -0
  232. package/dist/edit/operators/dissolve-edges.d.ts.map +1 -0
  233. package/dist/edit/operators/dissolve-edges.js +55 -0
  234. package/dist/edit/operators/dissolve-edges.js.map +1 -0
  235. package/dist/edit/operators/dissolve-faces.d.ts +9 -0
  236. package/dist/edit/operators/dissolve-faces.d.ts.map +1 -0
  237. package/dist/edit/operators/dissolve-faces.js +98 -0
  238. package/dist/edit/operators/dissolve-faces.js.map +1 -0
  239. package/dist/edit/operators/dissolve-vertices.d.ts +13 -0
  240. package/dist/edit/operators/dissolve-vertices.d.ts.map +1 -0
  241. package/dist/edit/operators/dissolve-vertices.js +36 -0
  242. package/dist/edit/operators/dissolve-vertices.js.map +1 -0
  243. package/dist/edit/operators/extrude.d.ts +18 -0
  244. package/dist/edit/operators/extrude.d.ts.map +1 -0
  245. package/dist/edit/operators/extrude.js +33 -0
  246. package/dist/edit/operators/extrude.js.map +1 -0
  247. package/dist/edit/operators/fill-hole.d.ts +12 -0
  248. package/dist/edit/operators/fill-hole.d.ts.map +1 -0
  249. package/dist/edit/operators/fill-hole.js +29 -0
  250. package/dist/edit/operators/fill-hole.js.map +1 -0
  251. package/dist/edit/operators/grid-fill.d.ts +12 -0
  252. package/dist/edit/operators/grid-fill.d.ts.map +1 -0
  253. package/dist/edit/operators/grid-fill.js +20 -0
  254. package/dist/edit/operators/grid-fill.js.map +1 -0
  255. package/dist/edit/operators/heal-manifold.d.ts +15 -0
  256. package/dist/edit/operators/heal-manifold.d.ts.map +1 -0
  257. package/dist/edit/operators/heal-manifold.js +62 -0
  258. package/dist/edit/operators/heal-manifold.js.map +1 -0
  259. package/dist/edit/operators/inset.d.ts +16 -0
  260. package/dist/edit/operators/inset.d.ts.map +1 -0
  261. package/dist/edit/operators/inset.js +40 -0
  262. package/dist/edit/operators/inset.js.map +1 -0
  263. package/dist/edit/operators/loop-cut.d.ts +14 -0
  264. package/dist/edit/operators/loop-cut.d.ts.map +1 -0
  265. package/dist/edit/operators/loop-cut.js +120 -0
  266. package/dist/edit/operators/loop-cut.js.map +1 -0
  267. package/dist/edit/operators/merge-by-distance.d.ts +15 -0
  268. package/dist/edit/operators/merge-by-distance.d.ts.map +1 -0
  269. package/dist/edit/operators/merge-by-distance.js +78 -0
  270. package/dist/edit/operators/merge-by-distance.js.map +1 -0
  271. package/dist/edit/operators/recompute-normals.d.ts +7 -0
  272. package/dist/edit/operators/recompute-normals.d.ts.map +1 -0
  273. package/dist/edit/operators/recompute-normals.js +67 -0
  274. package/dist/edit/operators/recompute-normals.js.map +1 -0
  275. package/dist/edit/operators/subdivide-edges.d.ts +11 -0
  276. package/dist/edit/operators/subdivide-edges.d.ts.map +1 -0
  277. package/dist/edit/operators/subdivide-edges.js +106 -0
  278. package/dist/edit/operators/subdivide-edges.js.map +1 -0
  279. package/dist/edit/operators/subdivide-faces.d.ts +11 -0
  280. package/dist/edit/operators/subdivide-faces.d.ts.map +1 -0
  281. package/dist/edit/operators/subdivide-faces.js +45 -0
  282. package/dist/edit/operators/subdivide-faces.js.map +1 -0
  283. package/dist/edit/selection.d.ts +19 -0
  284. package/dist/edit/selection.d.ts.map +1 -0
  285. package/dist/edit/selection.js +21 -0
  286. package/dist/edit/selection.js.map +1 -0
  287. package/dist/edit/to-editable.d.ts +9 -0
  288. package/dist/edit/to-editable.d.ts.map +1 -0
  289. package/dist/edit/to-editable.js +19 -0
  290. package/dist/edit/to-editable.js.map +1 -0
  291. package/dist/edit/types.d.ts +111 -0
  292. package/dist/edit/types.d.ts.map +1 -0
  293. package/dist/edit/types.js +2 -0
  294. package/dist/edit/types.js.map +1 -0
  295. package/dist/edit/warnings.d.ts +14 -0
  296. package/dist/edit/warnings.d.ts.map +1 -0
  297. package/dist/edit/warnings.js +11 -0
  298. package/dist/edit/warnings.js.map +1 -0
  299. package/dist/index.d.ts +11 -0
  300. package/dist/index.d.ts.map +1 -0
  301. package/dist/index.js +6 -0
  302. package/dist/index.js.map +1 -0
  303. package/dist/inspect/index.d.ts +9 -0
  304. package/dist/inspect/index.d.ts.map +1 -0
  305. package/dist/inspect/index.js +5 -0
  306. package/dist/inspect/index.js.map +1 -0
  307. package/dist/inspect/inspect-material.d.ts +12 -0
  308. package/dist/inspect/inspect-material.d.ts.map +1 -0
  309. package/dist/inspect/inspect-material.js +2 -0
  310. package/dist/inspect/inspect-material.js.map +1 -0
  311. package/dist/inspect/mesh-to-readable.d.ts +4 -0
  312. package/dist/inspect/mesh-to-readable.d.ts.map +1 -0
  313. package/dist/inspect/mesh-to-readable.js +47 -0
  314. package/dist/inspect/mesh-to-readable.js.map +1 -0
  315. package/dist/inspect/mesh-to-wireframe.d.ts +5 -0
  316. package/dist/inspect/mesh-to-wireframe.d.ts.map +1 -0
  317. package/dist/inspect/mesh-to-wireframe.js +101 -0
  318. package/dist/inspect/mesh-to-wireframe.js.map +1 -0
  319. package/dist/inspect/normal-debug-material.d.ts +8 -0
  320. package/dist/inspect/normal-debug-material.d.ts.map +1 -0
  321. package/dist/inspect/normal-debug-material.js +42 -0
  322. package/dist/inspect/normal-debug-material.js.map +1 -0
  323. package/dist/inspect/normal-debug-shader.d.ts +2 -0
  324. package/dist/inspect/normal-debug-shader.d.ts.map +1 -0
  325. package/dist/inspect/normal-debug-shader.js +32 -0
  326. package/dist/inspect/normal-debug-shader.js.map +1 -0
  327. package/dist/inspect/wireframe-material.d.ts +9 -0
  328. package/dist/inspect/wireframe-material.d.ts.map +1 -0
  329. package/dist/inspect/wireframe-material.js +45 -0
  330. package/dist/inspect/wireframe-material.js.map +1 -0
  331. package/dist/inspect/wireframe-mesh.d.ts +9 -0
  332. package/dist/inspect/wireframe-mesh.d.ts.map +1 -0
  333. package/dist/inspect/wireframe-mesh.js +2 -0
  334. package/dist/inspect/wireframe-mesh.js.map +1 -0
  335. package/dist/inspect/wireframe-shader.d.ts +2 -0
  336. package/dist/inspect/wireframe-shader.d.ts.map +1 -0
  337. package/dist/inspect/wireframe-shader.js +24 -0
  338. package/dist/inspect/wireframe-shader.js.map +1 -0
  339. package/dist/passes/index.d.ts +6 -0
  340. package/dist/passes/index.d.ts.map +1 -0
  341. package/dist/passes/index.js +5 -0
  342. package/dist/passes/index.js.map +1 -0
  343. package/dist/passes/pass-sequence.d.ts +9 -0
  344. package/dist/passes/pass-sequence.d.ts.map +1 -0
  345. package/dist/passes/pass-sequence.js +21 -0
  346. package/dist/passes/pass-sequence.js.map +1 -0
  347. package/dist/passes/pass.d.ts +4 -0
  348. package/dist/passes/pass.d.ts.map +1 -0
  349. package/dist/passes/pass.js +99 -0
  350. package/dist/passes/pass.js.map +1 -0
  351. package/dist/pipeline.d.ts +16 -0
  352. package/dist/pipeline.d.ts.map +1 -0
  353. package/dist/pipeline.js +10 -0
  354. package/dist/pipeline.js.map +1 -0
  355. package/dist/rapid-renderer.d.ts +18 -0
  356. package/dist/rapid-renderer.d.ts.map +1 -0
  357. package/dist/rapid-renderer.js +58 -0
  358. package/dist/rapid-renderer.js.map +1 -0
  359. package/dist/render-pass.d.ts +33 -0
  360. package/dist/render-pass.d.ts.map +1 -0
  361. package/dist/render-pass.js +67 -0
  362. package/dist/render-pass.js.map +1 -0
  363. package/dist/render-target/render-target-canvas.d.ts +15 -0
  364. package/dist/render-target/render-target-canvas.d.ts.map +1 -0
  365. package/dist/render-target/render-target-canvas.js +59 -0
  366. package/dist/render-target/render-target-canvas.js.map +1 -0
  367. package/dist/render-target/render-target-multi.d.ts +4 -0
  368. package/dist/render-target/render-target-multi.d.ts.map +1 -0
  369. package/dist/render-target/render-target-multi.js +90 -0
  370. package/dist/render-target/render-target-multi.js.map +1 -0
  371. package/dist/render-target/render-target.d.ts +10 -0
  372. package/dist/render-target/render-target.d.ts.map +1 -0
  373. package/dist/render-target/render-target.js +98 -0
  374. package/dist/render-target/render-target.js.map +1 -0
  375. package/dist/render-target/types.d.ts +59 -0
  376. package/dist/render-target/types.d.ts.map +1 -0
  377. package/dist/render-target/types.js +2 -0
  378. package/dist/render-target/types.js.map +1 -0
  379. package/dist/uniform-pool-internals.d.ts +12 -0
  380. package/dist/uniform-pool-internals.d.ts.map +1 -0
  381. package/dist/uniform-pool-internals.js +24 -0
  382. package/dist/uniform-pool-internals.js.map +1 -0
  383. package/dist/uniform-pool-types.d.ts +22 -0
  384. package/dist/uniform-pool-types.d.ts.map +1 -0
  385. package/dist/uniform-pool-types.js +2 -0
  386. package/dist/uniform-pool-types.js.map +1 -0
  387. package/dist/uniform-pool.d.ts +30 -0
  388. package/dist/uniform-pool.d.ts.map +1 -0
  389. package/dist/uniform-pool.js +127 -0
  390. package/dist/uniform-pool.js.map +1 -0
  391. package/dist/utils/canvas-mouse-tracker.d.ts +11 -0
  392. package/dist/utils/canvas-mouse-tracker.d.ts.map +1 -0
  393. package/dist/utils/canvas-mouse-tracker.js +19 -0
  394. package/dist/utils/canvas-mouse-tracker.js.map +1 -0
  395. package/dist/utils/canvas-resolution.d.ts +9 -0
  396. package/dist/utils/canvas-resolution.d.ts.map +1 -0
  397. package/dist/utils/canvas-resolution.js +16 -0
  398. package/dist/utils/canvas-resolution.js.map +1 -0
  399. package/dist/utils/frame-clock.d.ts +10 -0
  400. package/dist/utils/frame-clock.d.ts.map +1 -0
  401. package/dist/utils/frame-clock.js +47 -0
  402. package/dist/utils/frame-clock.js.map +1 -0
  403. package/dist/utils/index.d.ts +7 -0
  404. package/dist/utils/index.d.ts.map +1 -0
  405. package/dist/utils/index.js +4 -0
  406. package/dist/utils/index.js.map +1 -0
  407. package/package.json +76 -0
  408. package/src/RenderPass.docs.md +41 -0
  409. package/src/createRenderPipeline.docs.md +34 -0
  410. package/src/domain/camera.docs.md +21 -0
  411. package/src/domain/deg-to-rad.docs.md +9 -0
  412. package/src/domain/material-factory.docs.md +59 -0
  413. package/src/domain/material.docs.md +12 -0
  414. package/src/domain/mesh.docs.md +28 -0
  415. package/src/domain/orthographic-camera.docs.md +22 -0
  416. package/src/domain/perspective-camera.docs.md +20 -0
  417. package/src/domain/srgb.docs.md +11 -0
  418. package/src/inspect/inspect-material.docs.md +23 -0
  419. package/src/inspect/mesh-to-wireframe.docs.md +29 -0
  420. package/src/inspect/normal-debug-material.docs.md +26 -0
  421. package/src/inspect/wireframe-material.docs.md +22 -0
  422. package/src/rapid-renderer.docs.md +18 -0
  423. package/src/uniform-pool.docs.md +60 -0
  424. package/src/utils/canvas-mouse-tracker.docs.md +13 -0
  425. package/src/utils/canvas-resolution.docs.md +13 -0
  426. package/src/utils/frame-clock.docs.md +14 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Vercel, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # @vgpu/render
2
+
3
+ > 0.0.1 — early preview
4
+
5
+ `@vgpu/render` is the small rendering layer on top of `@vgpu/core`. It currently focuses on two public building blocks: creating a render pipeline from a vgpu shader wrapper, and issuing a render pass against a texture or texture view. The package is intentionally narrow in 0.0.1 and leaves higher-level scene helpers for later releases.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @vgpu/render
11
+ ```
12
+
13
+ ## Exports
14
+
15
+ ### Runtime
16
+ - `createRenderPipeline`
17
+ - `RenderPass`
18
+
19
+ ### Types
20
+ - `RenderPipelineOptions`
21
+ - `ColorAttachment`
22
+ - `RenderPassOptions`
23
+
24
+ ## Usage
25
+
26
+ ```ts
27
+ import { App } from "@vgpu/core";
28
+ import { createMockAdapter } from "@vgpu/adapter-mock";
29
+ import { createRenderPipeline, RenderPass } from "@vgpu/render";
30
+
31
+ const { device } = await App.create({ adapter: createMockAdapter() });
32
+ const shader = device.createShader(`
33
+ @vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
34
+ var p = array<vec2f, 3>(vec2f(0.0, 0.5), vec2f(-0.5, -0.5), vec2f(0.5, -0.5));
35
+ return vec4f(p[i], 0.0, 1.0);
36
+ }
37
+ @fragment fn fs_main() -> @location(0) vec4f { return vec4f(0.2, 0.6, 1.0, 1.0); }
38
+ `);
39
+ const target = device.createTexture({ size: [64, 64], format: "rgba8unorm", usage: ["render_attachment", "copy_src"] });
40
+ const pipeline = createRenderPipeline(device, {
41
+ shader,
42
+ vertex: { entry: "vs_main" },
43
+ fragment: { entry: "fs_main", targets: [{ format: "rgba8unorm" }] },
44
+ });
45
+ const pass = new RenderPass(device, {
46
+ colorAttachments: [{ view: target, loadOp: "clear", storeOp: "store", clearValue: [0, 0, 0, 1] }],
47
+ });
48
+ pass.setPipeline(pipeline);
49
+ pass.draw(3);
50
+ pass.end();
51
+ ```
52
+
53
+ ## License
54
+
55
+ MIT.
@@ -0,0 +1,10 @@
1
+ import type { Mat4, Vec3 } from "wgpu-matrix";
2
+ /** A pure camera value containing the matrix shaders need for drawing. */
3
+ export interface Camera {
4
+ /** Column-major projection times view matrix, computed once at construction. */
5
+ readonly viewProjectionMatrix: Mat4;
6
+ /** Camera position in world space. */
7
+ readonly position: Vec3;
8
+ }
9
+ export type { Mat4, Vec3 };
10
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/domain/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,MAAM;IACrB,gFAAgF;IAChF,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACpC,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB;AAED,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/domain/camera.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { type StandardData } from "./primitive-data-utils.ts";
2
+ export interface CapsuleDataSpec {
3
+ readonly radius: number;
4
+ readonly height: number;
5
+ readonly radialSegments: number;
6
+ readonly heightSegments: number;
7
+ readonly shading: "flat" | "smooth";
8
+ }
9
+ export declare function capsuleData(spec: CapsuleDataSpec): StandardData;
10
+ //# sourceMappingURL=capsule-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule-data.d.ts","sourceRoot":"","sources":["../../src/domain/capsule-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAG/D"}
@@ -0,0 +1,61 @@
1
+ import { pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
2
+ export function capsuleData(spec) {
3
+ const smooth = capsuleSmoothData(spec);
4
+ return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
5
+ }
6
+ function capsuleSmoothData(spec) {
7
+ const vertices = [];
8
+ const indices = [];
9
+ const rows = 3 * spec.heightSegments + 1;
10
+ const total = spec.height + Math.PI * spec.radius;
11
+ for (let row = 0; row < rows; row++)
12
+ addRow(vertices, spec, row, total);
13
+ const stride = spec.radialSegments + 1;
14
+ for (let j = 0; j < rows - 1; j++) {
15
+ for (let i = 0; i < spec.radialSegments; i++) {
16
+ const a = j * stride + i;
17
+ const b = a + 1;
18
+ const d = (j + 1) * stride + i;
19
+ const c = d + 1;
20
+ indices.push(a, b, d, b, c, d);
21
+ }
22
+ }
23
+ return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
24
+ }
25
+ function addRow(vertices, spec, row, total) {
26
+ const { radius, height, radialSegments, heightSegments } = spec;
27
+ const bottomEnd = heightSegments;
28
+ const cylinderEnd = bottomEnd + heightSegments;
29
+ let y = 0;
30
+ let ringRadius = radius;
31
+ let ny = 0;
32
+ let vDistance = 0;
33
+ if (row <= bottomEnd) {
34
+ const angle = -Math.PI / 2 + (row / heightSegments) * (Math.PI / 2);
35
+ ringRadius = radius * Math.cos(angle);
36
+ y = -height / 2 + radius * Math.sin(angle);
37
+ ny = row === 0 ? -1 : Math.sin(angle);
38
+ vDistance = (angle + Math.PI / 2) * radius;
39
+ }
40
+ else if (row <= cylinderEnd) {
41
+ const t = (row - bottomEnd) / heightSegments;
42
+ y = -height / 2 + t * height;
43
+ vDistance = Math.PI * radius / 2 + t * height;
44
+ }
45
+ else {
46
+ const angle = ((row - cylinderEnd) / heightSegments) * (Math.PI / 2);
47
+ ringRadius = radius * Math.cos(angle);
48
+ y = height / 2 + radius * Math.sin(angle);
49
+ ny = row === 3 * heightSegments ? 1 : Math.sin(angle);
50
+ vDistance = Math.PI * radius / 2 + height + angle * radius;
51
+ }
52
+ const radial = Math.sqrt(Math.max(0, 1 - ny * ny));
53
+ for (let i = 0; i <= radialSegments; i++) {
54
+ const u = i / radialSegments;
55
+ const theta = u * Math.PI * 2;
56
+ const cos = Math.cos(theta);
57
+ const sin = Math.sin(theta);
58
+ pushVertex(vertices, ringRadius * cos, y, -ringRadius * sin, radial * cos, ny, -radial * sin, u, total > 0 ? vDistance / total : 0);
59
+ }
60
+ }
61
+ //# sourceMappingURL=capsule-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule-data.js","sourceRoot":"","sources":["../../src/domain/capsule-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type StandardData } from "./primitive-data-utils.ts";
2
+ export interface ConeDataSpec {
3
+ readonly radius: number;
4
+ readonly height: number;
5
+ readonly radialSegments: number;
6
+ readonly heightSegments: number;
7
+ readonly openEnded: boolean;
8
+ readonly thetaStart: number;
9
+ readonly thetaLength: number;
10
+ readonly shading: "flat" | "smooth";
11
+ }
12
+ export declare function coneData(spec: ConeDataSpec): StandardData;
13
+ //# sourceMappingURL=cone-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cone-data.d.ts","sourceRoot":"","sources":["../../src/domain/cone-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAGzD"}
@@ -0,0 +1,52 @@
1
+ import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
2
+ export function coneData(spec) {
3
+ const smooth = coneSmoothData(spec);
4
+ return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
5
+ }
6
+ function coneSmoothData(spec) {
7
+ const { radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength } = spec;
8
+ const vertices = [];
9
+ const indices = [];
10
+ const row = radialSegments + 1;
11
+ for (let j = 0; j <= heightSegments; j++) {
12
+ const v = j / heightSegments;
13
+ const y = -height / 2 + v * height;
14
+ const r = radius * (1 - v);
15
+ for (let i = 0; i <= radialSegments; i++) {
16
+ const u = i / radialSegments;
17
+ const theta = thetaStart + u * thetaLength;
18
+ const cos = Math.cos(theta);
19
+ const sin = Math.sin(theta);
20
+ const n = normalized(cos * height, radius, -sin * height);
21
+ pushVertex(vertices, r * cos, y, -r * sin, n[0], n[1], n[2], u, v);
22
+ }
23
+ }
24
+ for (let j = 0; j < heightSegments; j++) {
25
+ for (let i = 0; i < radialSegments; i++) {
26
+ const a = j * row + i;
27
+ const b = a + 1;
28
+ const d = (j + 1) * row + i;
29
+ const c = d + 1;
30
+ indices.push(a, b, d, b, c, d);
31
+ }
32
+ }
33
+ if (!openEnded)
34
+ addBaseCap(vertices, indices, spec);
35
+ return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
36
+ }
37
+ function addBaseCap(vertices, indices, spec) {
38
+ const { radius, height, radialSegments, thetaStart, thetaLength } = spec;
39
+ const center = vertices.length / 8;
40
+ pushVertex(vertices, 0, -height / 2, 0, 0, -1, 0, 0.5, 0.5);
41
+ const rim = vertices.length / 8;
42
+ for (let i = 0; i <= radialSegments; i++) {
43
+ const u = i / radialSegments;
44
+ const theta = thetaStart + u * thetaLength;
45
+ const x = Math.cos(theta);
46
+ const z = -Math.sin(theta);
47
+ pushVertex(vertices, radius * x, -height / 2, radius * z, 0, -1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
48
+ }
49
+ for (let i = 0; i < radialSegments; i++)
50
+ indices.push(center, rim + i + 1, rim + i);
51
+ }
52
+ //# sourceMappingURL=cone-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cone-data.js","sourceRoot":"","sources":["../../src/domain/cone-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type StandardData } from "./primitive-data-utils.ts";
2
+ export interface CylinderDataSpec {
3
+ readonly radiusTop: number;
4
+ readonly radiusBottom: number;
5
+ readonly height: number;
6
+ readonly radialSegments: number;
7
+ readonly heightSegments: number;
8
+ readonly openEnded: boolean;
9
+ readonly thetaStart: number;
10
+ readonly thetaLength: number;
11
+ readonly shading: "flat" | "smooth";
12
+ }
13
+ export declare function cylinderData(spec: CylinderDataSpec): StandardData;
14
+ //# sourceMappingURL=cylinder-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cylinder-data.d.ts","sourceRoot":"","sources":["../../src/domain/cylinder-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAGjE"}
@@ -0,0 +1,58 @@
1
+ import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
2
+ export function cylinderData(spec) {
3
+ const smooth = cylinderSmoothData(spec);
4
+ return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
5
+ }
6
+ function cylinderSmoothData(spec) {
7
+ const vertices = [];
8
+ const indices = [];
9
+ const { radialSegments, heightSegments, radiusTop, radiusBottom, height, thetaStart, thetaLength } = spec;
10
+ const row = radialSegments + 1;
11
+ for (let j = 0; j <= heightSegments; j++) {
12
+ const v = j / heightSegments;
13
+ const y = -height / 2 + v * height;
14
+ const r = radiusBottom + (radiusTop - radiusBottom) * v;
15
+ for (let i = 0; i <= radialSegments; i++) {
16
+ const u = i / radialSegments;
17
+ const theta = thetaStart + u * thetaLength;
18
+ const cos = Math.cos(theta);
19
+ const sin = Math.sin(theta);
20
+ const n = normalized(cos * height, radiusBottom - radiusTop, -sin * height);
21
+ pushVertex(vertices, r * cos, y, -r * sin, n[0], n[1], n[2], u, v);
22
+ }
23
+ }
24
+ for (let j = 0; j < heightSegments; j++)
25
+ for (let i = 0; i < radialSegments; i++) {
26
+ const a = j * row + i;
27
+ const b = a + 1;
28
+ const d = (j + 1) * row + i;
29
+ const c = d + 1;
30
+ indices.push(a, b, d, b, c, d);
31
+ }
32
+ if (!spec.openEnded) {
33
+ if (radiusTop > 0)
34
+ addCap(vertices, indices, spec, "top");
35
+ if (radiusBottom > 0)
36
+ addCap(vertices, indices, spec, "bottom");
37
+ }
38
+ return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
39
+ }
40
+ function addCap(vertices, indices, spec, cap) {
41
+ const { radialSegments, thetaStart, thetaLength } = spec;
42
+ const top = cap === "top";
43
+ const y = top ? spec.height / 2 : -spec.height / 2;
44
+ const radius = top ? spec.radiusTop : spec.radiusBottom;
45
+ const center = vertices.length / 8;
46
+ pushVertex(vertices, 0, y, 0, 0, top ? 1 : -1, 0, 0.5, 0.5);
47
+ const rim = vertices.length / 8;
48
+ for (let i = 0; i <= radialSegments; i++) {
49
+ const u = i / radialSegments;
50
+ const theta = thetaStart + u * thetaLength;
51
+ const x = Math.cos(theta);
52
+ const z = -Math.sin(theta);
53
+ pushVertex(vertices, radius * x, y, radius * z, 0, top ? 1 : -1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
54
+ }
55
+ for (let i = 0; i < radialSegments; i++)
56
+ indices.push(center, top ? rim + i : rim + i + 1, top ? rim + i + 1 : rim + i);
57
+ }
58
+ //# sourceMappingURL=cylinder-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cylinder-data.js","sourceRoot":"","sources":["../../src/domain/cylinder-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function degToRad(deg: number): number;
2
+ //# sourceMappingURL=deg-to-rad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deg-to-rad.d.ts","sourceRoot":"","sources":["../../src/domain/deg-to-rad.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C"}
@@ -0,0 +1,4 @@
1
+ export function degToRad(deg) {
2
+ return (deg * Math.PI) / 180;
3
+ }
4
+ //# sourceMappingURL=deg-to-rad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deg-to-rad.js","sourceRoot":"","sources":["../../src/domain/deg-to-rad.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface DiskDataSpec {
2
+ readonly radius: number;
3
+ readonly segments: number;
4
+ readonly thetaStart: number;
5
+ readonly thetaLength: number;
6
+ }
7
+ export interface DiskData {
8
+ readonly vertices: Float32Array<ArrayBuffer>;
9
+ readonly indices: Uint16Array<ArrayBuffer>;
10
+ }
11
+ export declare function diskData(spec: DiskDataSpec): DiskData;
12
+ //# sourceMappingURL=disk-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk-data.d.ts","sourceRoot":"","sources":["../../src/domain/disk-data.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAC5C;AAID,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAqBrD"}
@@ -0,0 +1,21 @@
1
+ const TWO_PI = Math.PI * 2;
2
+ export function diskData(spec) {
3
+ const { radius, segments, thetaStart, thetaLength } = spec;
4
+ const vertices = [0, 0, 0, 0, 1, 0, 0.5, 0.5];
5
+ const indices = [];
6
+ const closed = Math.abs(thetaLength - TWO_PI) < 1e-12;
7
+ const rimCount = closed ? segments : segments + 1;
8
+ for (let i = 0; i < rimCount; i++) {
9
+ const t = closed ? i / segments : i / (rimCount - 1);
10
+ const theta = thetaStart + t * thetaLength;
11
+ const x = Math.cos(theta);
12
+ const z = -Math.sin(theta);
13
+ vertices.push(radius * x, 0, radius * z, 0, 1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
14
+ }
15
+ for (let i = 0; i < segments; i++) {
16
+ const next = closed && i === segments - 1 ? 1 : i + 2;
17
+ indices.push(0, i + 1, next);
18
+ }
19
+ return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices) };
20
+ }
21
+ //# sourceMappingURL=disk-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk-data.js","sourceRoot":"","sources":["../../src/domain/disk-data.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAE3B,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC3D,MAAM,QAAQ,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;IAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACrF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type StandardData } from "./primitive-data-utils.ts";
2
+ export interface IcosphereDataSpec {
3
+ readonly radius: number;
4
+ readonly subdivisions: number;
5
+ readonly shading: "flat" | "smooth";
6
+ }
7
+ export declare function icosphereData(spec: IcosphereDataSpec): StandardData;
8
+ //# sourceMappingURL=icosphere-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icosphere-data.d.ts","sourceRoot":"","sources":["../../src/domain/icosphere-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAeD,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAiBnE"}
@@ -0,0 +1,58 @@
1
+ import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
2
+ const T = (1 + Math.sqrt(5)) / 2;
3
+ const SEED = [
4
+ [-1, T, 0], [1, T, 0], [-1, -T, 0], [1, -T, 0],
5
+ [0, -1, T], [0, 1, T], [0, -1, -T], [0, 1, -T],
6
+ [T, 0, -1], [T, 0, 1], [-T, 0, -1], [-T, 0, 1],
7
+ ];
8
+ const FACES = [
9
+ [0, 11, 5], [0, 5, 1], [0, 1, 7], [0, 7, 10], [0, 10, 11],
10
+ [1, 5, 9], [5, 11, 4], [11, 10, 2], [10, 7, 6], [7, 1, 8],
11
+ [3, 9, 4], [3, 4, 2], [3, 2, 6], [3, 6, 8], [3, 8, 9],
12
+ [4, 9, 5], [2, 4, 11], [6, 2, 10], [8, 6, 7], [9, 8, 1],
13
+ ];
14
+ export function icosphereData(spec) {
15
+ const positions = SEED.map((p) => {
16
+ const n = normalized(p[0], p[1], p[2]);
17
+ return [n[0], n[1], n[2]];
18
+ });
19
+ let faces = FACES.map((face) => [...face]);
20
+ for (let i = 0; i < spec.subdivisions; i++)
21
+ faces = subdivide(positions, faces);
22
+ const vertices = [];
23
+ for (const p of positions) {
24
+ const u = Math.atan2(p[2], p[0]) / (Math.PI * 2) + 0.5;
25
+ const v = Math.asin(p[1]) / Math.PI + 0.5;
26
+ pushVertex(vertices, p[0] * spec.radius, p[1] * spec.radius, p[2] * spec.radius, p[0], p[1], p[2], u, v);
27
+ }
28
+ const indices = faces.flat();
29
+ const smooth = { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: positions.length };
30
+ return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
31
+ }
32
+ function subdivide(positions, faces) {
33
+ const next = [];
34
+ const midpointCache = new Map();
35
+ for (const [a, b, c] of faces) {
36
+ const ab = midpoint(positions, midpointCache, a, b);
37
+ const bc = midpoint(positions, midpointCache, b, c);
38
+ const ca = midpoint(positions, midpointCache, c, a);
39
+ next.push([a, ab, ca], [b, bc, ab], [c, ca, bc], [ab, bc, ca]);
40
+ }
41
+ return next;
42
+ }
43
+ function midpoint(positions, cache, a, b) {
44
+ const lo = Math.min(a, b);
45
+ const hi = Math.max(a, b);
46
+ const key = `${lo}|${hi}`;
47
+ const cached = cache.get(key);
48
+ if (cached !== undefined)
49
+ return cached;
50
+ const pa = positions[a];
51
+ const pb = positions[b];
52
+ const p = normalized(pa[0] + pb[0], pa[1] + pb[1], pa[2] + pb[2]);
53
+ const index = positions.length;
54
+ positions.push([p[0], p[1], p[2]]);
55
+ cache.set(key, index);
56
+ return index;
57
+ }
58
+ //# sourceMappingURL=icosphere-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icosphere-data.js","sourceRoot":"","sources":["../../src/domain/icosphere-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AAQvG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,MAAM,IAAI,GAAmD;IAC3D,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/C,CAAC;AACF,MAAM,KAAK,GAAmD;IAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAA6B,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAA6B,CAAC,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;QAAE,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAC1C,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAiB,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IACxI,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,SAAqC,EAAE,KAAqD;IAC7G,MAAM,IAAI,GAA+B,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,SAAqC,EAAE,KAA0B,EAAE,CAAS,EAAE,CAAS;IACvG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAC/B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,40 @@
1
+ export { degToRad } from "./deg-to-rad.ts";
2
+ export { orthographicCamera } from "./orthographic-camera.ts";
3
+ export { Mesh } from "./mesh.ts";
4
+ export { box } from "./mesh-box.ts";
5
+ export { capsule } from "./mesh-capsule.ts";
6
+ export { cone } from "./mesh-cone.ts";
7
+ export { cylinder } from "./mesh-cylinder.ts";
8
+ export { disk } from "./mesh-disk.ts";
9
+ export { dodecahedron } from "./mesh-dodecahedron.ts";
10
+ export { fullscreenQuad } from "./mesh-fullscreen-quad.ts";
11
+ export { icosahedron } from "./mesh-icosahedron.ts";
12
+ export { icosphere } from "./mesh-icosphere.ts";
13
+ export { plane } from "./mesh-plane.ts";
14
+ export { ring } from "./mesh-ring.ts";
15
+ export { sphere } from "./mesh-sphere.ts";
16
+ export { tetrahedron } from "./mesh-tetrahedron.ts";
17
+ export { torus } from "./mesh-torus.ts";
18
+ export { octahedron } from "./mesh-octahedron.ts";
19
+ export { material } from "./material-factory.ts";
20
+ export { sampler } from "./material-sampler.ts";
21
+ export { perspectiveCamera } from "./perspective-camera.ts";
22
+ export { srgb } from "./srgb.ts";
23
+ export type { Camera, Mat4, Vec3 } from "./camera.ts";
24
+ export type { Material, MaterialUniformValue } from "./material.ts";
25
+ export type { MaterialSamplerSpec, MaterialSpec, MaterialTextureSpec, SamplerSpec, TextureKind, TextureSpec, TextureValue, VertexLayoutKind, WgslUniformType, WriteTextureValues } from "./material-factory.ts";
26
+ export type { Sampler } from "./material-sampler.ts";
27
+ export type { BoxSpec } from "./mesh-box.ts";
28
+ export type { CapsuleSpec } from "./mesh-capsule.ts";
29
+ export type { ConeSpec } from "./mesh-cone.ts";
30
+ export type { CylinderSpec } from "./mesh-cylinder.ts";
31
+ export type { DiskSpec } from "./mesh-disk.ts";
32
+ export type { Mesh as MeshPrimitive, MeshGpu, VertexAttributes } from "./mesh-types.ts";
33
+ export type { FullscreenQuadSpec } from "./mesh-fullscreen-quad.ts";
34
+ export type { IcosphereSpec } from "./mesh-icosphere.ts";
35
+ export type { PlaneSpec } from "./mesh-plane.ts";
36
+ export type { PolyhedronSpec } from "./polyhedron-mesh.ts";
37
+ export type { RingSpec } from "./mesh-ring.ts";
38
+ export type { SphereSpec } from "./mesh-sphere.ts";
39
+ export type { TorusSpec } from "./mesh-torus.ts";
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChN,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export { degToRad } from "./deg-to-rad.js";
2
+ export { orthographicCamera } from "./orthographic-camera.js";
3
+ export { Mesh } from "./mesh.js";
4
+ export { box } from "./mesh-box.js";
5
+ export { capsule } from "./mesh-capsule.js";
6
+ export { cone } from "./mesh-cone.js";
7
+ export { cylinder } from "./mesh-cylinder.js";
8
+ export { disk } from "./mesh-disk.js";
9
+ export { dodecahedron } from "./mesh-dodecahedron.js";
10
+ export { fullscreenQuad } from "./mesh-fullscreen-quad.js";
11
+ export { icosahedron } from "./mesh-icosahedron.js";
12
+ export { icosphere } from "./mesh-icosphere.js";
13
+ export { plane } from "./mesh-plane.js";
14
+ export { ring } from "./mesh-ring.js";
15
+ export { sphere } from "./mesh-sphere.js";
16
+ export { tetrahedron } from "./mesh-tetrahedron.js";
17
+ export { torus } from "./mesh-torus.js";
18
+ export { octahedron } from "./mesh-octahedron.js";
19
+ export { material } from "./material-factory.js";
20
+ export { sampler } from "./material-sampler.js";
21
+ export { perspectiveCamera } from "./perspective-camera.js";
22
+ export { srgb } from "./srgb.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Device } from "@vgpu/core";
2
+ import type { Material, MaterialGpu } from "./material.ts";
3
+ import { type WgslUniformType } from "./wgsl-alignment.ts";
4
+ import type { MaterialSamplerSpec, MaterialTextureSpec, WriteTextureValues } from "./material-textures-schema.ts";
5
+ export type { WgslUniformType } from "./wgsl-alignment.ts";
6
+ export type { MaterialSamplerSpec, MaterialTextureSpec, SamplerSpec, TextureKind, TextureSpec, TextureValue, WriteTextureValues } from "./material-textures-schema.ts";
7
+ export type VertexLayoutKind = "position-only" | "position-normal" | "position-normal-uv" | "position-uv";
8
+ export type UniformValue = number | readonly number[] | Float32Array | Uint32Array | Int32Array;
9
+ export interface MaterialSpec<U extends Record<string, WgslUniformType> = Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>> {
10
+ readonly device: Device;
11
+ readonly vertex: string;
12
+ readonly fragment: string;
13
+ readonly uniforms: U;
14
+ readonly textures?: T;
15
+ readonly samplers?: S;
16
+ readonly vertexLayout: VertexLayoutKind;
17
+ readonly targetFormat?: GPUTextureFormat;
18
+ readonly depthFormat?: GPUTextureFormat | null;
19
+ }
20
+ export interface FactoryMaterial<U extends Record<string, WgslUniformType> = Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>> extends Material {
21
+ readonly bindGroup: GPUBindGroup;
22
+ readonly uniformOffsets: Readonly<Record<keyof U, number>>;
23
+ readonly textureBindings: Readonly<Record<keyof T, number>>;
24
+ readonly samplerBindings: Readonly<Record<string, number>>;
25
+ readonly gpu: MaterialGpu & {
26
+ readonly bindGroup: GPUBindGroup;
27
+ readonly uniformBuffer: GPUBuffer;
28
+ readonly defaultSampler?: GPUSampler;
29
+ };
30
+ readonly writeUniforms: (values: Record<keyof U, UniformValue>) => void;
31
+ readonly writeTextures: (values: WriteTextureValues<T>) => void;
32
+ }
33
+ export declare function material<U extends Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>>(spec: MaterialSpec<U, T, S>): FactoryMaterial<U, T, S>;
34
+ //# sourceMappingURL=material-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-factory.d.ts","sourceRoot":"","sources":["../../src/domain/material-factory.ts"],"names":[],"mappings":"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"}