@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
@@ -0,0 +1,58 @@
1
+ import { invalidUsage } from "./uniform-pool-internals.js";
2
+ const textureBrand = Symbol.for("vgpu/Texture");
3
+ export class RapidRenderer {
4
+ device;
5
+ constructor(device) {
6
+ this.device = device;
7
+ }
8
+ get gpu() { return this.device.gpu; }
9
+ async draw(spec) {
10
+ const pipeline = spec.pipeline ?? spec.material.pipeline;
11
+ if (!pipeline)
12
+ throw invalidUsage("RapidRenderer.draw", "DrawSpec.material requires Material.pipeline.");
13
+ const vertexCount = spec.vertexCount ?? spec.mesh?.vertexCount;
14
+ if (vertexCount === undefined)
15
+ throw invalidUsage("RapidRenderer.draw", "DrawSpec.vertexCount is required when DrawSpec.mesh is absent.");
16
+ const encoder = this.device.gpu.createCommandEncoder();
17
+ const pass = encoder.beginRenderPass({
18
+ colorAttachments: [{ view: textureView(spec.target), loadOp: "clear", storeOp: "store", clearValue: colorTuple(spec.clearValue) }],
19
+ depthStencilAttachment: spec.depthTarget ? { view: textureView(spec.depthTarget), depthClearValue: 1, depthLoadOp: "clear", depthStoreOp: "store" } : undefined,
20
+ });
21
+ pass.setPipeline(pipeline);
22
+ pass.setBindGroup(0, spec.material.bindGroup ?? null);
23
+ if (spec.mesh)
24
+ bindMesh(pass, spec.mesh, vertexCount);
25
+ else
26
+ pass.draw(vertexCount, 1, 0, 0);
27
+ pass.end();
28
+ this.device.queue.gpu.submit([encoder.finish()]);
29
+ }
30
+ }
31
+ function bindMesh(pass, mesh, vertexCount) {
32
+ pass.setVertexBuffer(0, mesh.gpu?.vertexBuffer ?? mesh.vertexBuffer.gpu);
33
+ if (mesh.indexBuffer !== undefined && mesh.indexCount !== undefined && mesh.indexFormat !== undefined) {
34
+ pass.setIndexBuffer(mesh.gpu?.indexBuffer ?? mesh.indexBuffer.gpu, mesh.indexFormat);
35
+ pass.drawIndexed(mesh.indexCount, 1, 0, 0, 0);
36
+ return;
37
+ }
38
+ pass.draw(vertexCount, 1, 0, 0);
39
+ }
40
+ function colorTuple(color) {
41
+ if (!color)
42
+ return [0, 0, 0, 1];
43
+ if (isIterableColor(color)) {
44
+ const values = Array.from(color);
45
+ return [values[0] ?? 0, values[1] ?? 0, values[2] ?? 0, values[3] ?? 1];
46
+ }
47
+ return [color.r, color.g, color.b, color.a];
48
+ }
49
+ function isIterableColor(color) {
50
+ return Symbol.iterator in Object(color);
51
+ }
52
+ function textureView(view) {
53
+ return isVGPUTexture(view) ? view.createView() : view;
54
+ }
55
+ function isVGPUTexture(view) {
56
+ return Boolean(view[textureBrand]);
57
+ }
58
+ //# sourceMappingURL=rapid-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rapid-renderer.js","sourceRoot":"","sources":["../src/rapid-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Buffer, type Device, type Texture } from "@vgpu/core";
2
+ export interface RenderPassOptions {
3
+ readonly colorAttachments: readonly ColorAttachment[];
4
+ readonly label?: string;
5
+ }
6
+ export interface ColorAttachment {
7
+ readonly view: Texture | GPUTextureView;
8
+ readonly loadOp: GPULoadOp;
9
+ readonly storeOp: GPUStoreOp;
10
+ readonly clearValue?: readonly [number, number, number, number];
11
+ }
12
+ export interface RenderPassDrawOptions {
13
+ readonly vertexCount: number;
14
+ readonly instanceCount?: number;
15
+ readonly firstVertex?: number;
16
+ readonly firstInstance?: number;
17
+ }
18
+ export type RenderPassDynamicOffsets = readonly GPUBufferDynamicOffset[] | Uint32Array;
19
+ export declare class RenderPass {
20
+ private readonly device;
21
+ private readonly encoder;
22
+ private passEncoder;
23
+ constructor(device: Device, opts: RenderPassOptions);
24
+ get gpu(): GPURenderPassEncoder;
25
+ setPipeline(pipeline: GPURenderPipeline): void;
26
+ setBindGroup(index: number, group: GPUBindGroup | null, dynamicOffsets?: RenderPassDynamicOffsets): void;
27
+ setVertexBuffer(slot: number, buffer: Buffer | GPUBuffer | null, offset?: number, size?: GPUSize64): void;
28
+ draw(options: RenderPassDrawOptions): void;
29
+ draw(vertexCount: number, instanceCount?: number, firstVertex?: number, firstInstance?: number): void;
30
+ end(): void;
31
+ dispose(): void;
32
+ }
33
+ //# sourceMappingURL=render-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-pass.d.ts","sourceRoot":"","sources":["../src/render-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,wBAAwB,GAAG,SAAS,sBAAsB,EAAE,GAAG,WAAW,CAAC;AAEvF,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,WAAW,CAA8B;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB;IAQpE,IAAI,GAAG,IAAI,oBAAoB,CAS9B;IAED,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI9C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAIxG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,SAAI,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI;IAIpG,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAC1C,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAcrG,GAAG,IAAI,IAAI;IAQX,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,67 @@
1
+ import { Buffer, VGPUError } from "@vgpu/core";
2
+ const textureBrand = Symbol.for("vgpu/Texture");
3
+ export class RenderPass {
4
+ device;
5
+ encoder;
6
+ passEncoder;
7
+ constructor(device, opts) {
8
+ this.device = device;
9
+ this.encoder = device.gpu.createCommandEncoder({ label: opts.label });
10
+ this.passEncoder = this.encoder.beginRenderPass({
11
+ label: opts.label,
12
+ colorAttachments: opts.colorAttachments.map(colorAttachment),
13
+ });
14
+ }
15
+ get gpu() {
16
+ if (!this.passEncoder) {
17
+ throw new VGPUError({
18
+ code: "VGPU-RENDER-PASS-ENDED",
19
+ message: "RenderPass.gpu cannot be accessed after end().",
20
+ where: "RenderPass.gpu",
21
+ });
22
+ }
23
+ return this.passEncoder;
24
+ }
25
+ setPipeline(pipeline) {
26
+ this.gpu.setPipeline(pipeline);
27
+ }
28
+ setBindGroup(index, group, dynamicOffsets) {
29
+ this.gpu.setBindGroup(index, group, dynamicOffsets);
30
+ }
31
+ setVertexBuffer(slot, buffer, offset = 0, size) {
32
+ this.gpu.setVertexBuffer(slot, gpuBuffer(buffer), offset, size);
33
+ }
34
+ draw(optionsOrVertexCount, instanceCount = 1, firstVertex = 0, firstInstance = 0) {
35
+ if (typeof optionsOrVertexCount === "number") {
36
+ this.gpu.draw(optionsOrVertexCount, instanceCount, firstVertex, firstInstance);
37
+ return;
38
+ }
39
+ this.gpu.draw(optionsOrVertexCount.vertexCount, optionsOrVertexCount.instanceCount ?? 1, optionsOrVertexCount.firstVertex ?? 0, optionsOrVertexCount.firstInstance ?? 0);
40
+ }
41
+ end() {
42
+ if (!this.passEncoder)
43
+ return;
44
+ const pass = this.passEncoder;
45
+ this.passEncoder = null;
46
+ pass.end();
47
+ this.device.queue.gpu.submit([this.encoder.finish()]);
48
+ }
49
+ dispose() {
50
+ this.end();
51
+ }
52
+ }
53
+ function colorAttachment(attachment) {
54
+ return {
55
+ view: isVGPUTexture(attachment.view) ? attachment.view.createView() : attachment.view,
56
+ loadOp: attachment.loadOp,
57
+ storeOp: attachment.storeOp,
58
+ clearValue: attachment.clearValue,
59
+ };
60
+ }
61
+ function gpuBuffer(buffer) {
62
+ return buffer instanceof Buffer ? buffer.gpu : buffer;
63
+ }
64
+ function isVGPUTexture(view) {
65
+ return Boolean(view[textureBrand]);
66
+ }
67
+ //# sourceMappingURL=render-pass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-pass.js","sourceRoot":"","sources":["../src/render-pass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { RenderTarget } from "./types.ts";
2
+ export interface CanvasRenderTargetOptions {
3
+ readonly label?: string;
4
+ readonly clearColor?: GPUColorDict | readonly [number, number, number, number];
5
+ }
6
+ /**
7
+ * Wraps a GPUCanvasContext in a lazy RenderTarget shape.
8
+ *
9
+ * The `.color` accessor calls `context.getCurrentTexture()` on every access.
10
+ * It is not safe to cache `.color` across frames; the canvas texture becomes
11
+ * invalid after `device.queue.submit`. Re-access `.color` each frame, or rely on
12
+ * pass helpers that read the target lazily.
13
+ */
14
+ export declare function renderTargetForCanvas(context: GPUCanvasContext, options?: CanvasRenderTargetOptions): RenderTarget;
15
+ //# sourceMappingURL=render-target-canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target-canvas.d.ts","sourceRoot":"","sources":["../../src/render-target/render-target-canvas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAChF;AAKD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,GAAE,yBAA8B,GAAG,YAAY,CAsBtH"}
@@ -0,0 +1,59 @@
1
+ import { Texture } from "@vgpu/core";
2
+ const DEFAULT_CLEAR_COLOR = Object.freeze({ r: 0, g: 0, b: 0, a: 1 });
3
+ const DEFAULT_FORMAT = "rgba8unorm";
4
+ /**
5
+ * Wraps a GPUCanvasContext in a lazy RenderTarget shape.
6
+ *
7
+ * The `.color` accessor calls `context.getCurrentTexture()` on every access.
8
+ * It is not safe to cache `.color` across frames; the canvas texture becomes
9
+ * invalid after `device.queue.submit`. Re-access `.color` each frame, or rely on
10
+ * pass helpers that read the target lazily.
11
+ */
12
+ export function renderTargetForCanvas(context, options = {}) {
13
+ const clearColor = colorDict(options.clearColor);
14
+ const target = {
15
+ get color() { return canvasTexture(context, options.label); },
16
+ get colors() { return Object.freeze([this.color]); },
17
+ get depth() { return undefined; },
18
+ get size() { return canvasSize(context); },
19
+ get format() { return canvasFormat(context); },
20
+ get sampleCount() { return 1; },
21
+ get label() { return options.label ?? "canvas"; },
22
+ get gpu() {
23
+ const texture = context.getCurrentTexture();
24
+ const colorAttachment = { view: texture.createView(), loadOp: "clear", storeOp: "store", clearValue: clearColor };
25
+ return Object.freeze({
26
+ colorAttachments: Object.freeze([colorAttachment]),
27
+ colorAttachment,
28
+ colorTexture: texture,
29
+ colorTextures: Object.freeze([texture]),
30
+ });
31
+ },
32
+ };
33
+ return Object.freeze(target);
34
+ }
35
+ function canvasTexture(context, label) {
36
+ const texture = context.getCurrentTexture();
37
+ return new Texture({}, texture, {
38
+ size: canvasSize(context),
39
+ format: canvasFormat(context),
40
+ usage: ["render_attachment"],
41
+ label: label ? `${label}.color` : "canvas.color",
42
+ });
43
+ }
44
+ function canvasSize(context) {
45
+ const canvas = context.canvas;
46
+ return [canvas.width, canvas.height];
47
+ }
48
+ function canvasFormat(context) {
49
+ const configured = context.getConfiguration?.();
50
+ return configured?.format ?? DEFAULT_FORMAT;
51
+ }
52
+ function colorDict(color) {
53
+ if (!color)
54
+ return DEFAULT_CLEAR_COLOR;
55
+ if (Array.isArray(color))
56
+ return { r: color[0], g: color[1], b: color[2], a: color[3] };
57
+ return color;
58
+ }
59
+ //# sourceMappingURL=render-target-canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target-canvas.js","sourceRoot":"","sources":["../../src/render-target/render-target-canvas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ColorAttachmentSpec, RenderTargetMultiSpec, RenderTargetN } from "./types.ts";
2
+ /** Creates an offscreen render target with N color textures and optional shared depth. */
3
+ export declare function renderTargetMulti<const Specs extends readonly ColorAttachmentSpec[]>(spec: RenderTargetMultiSpec<Specs>): Promise<RenderTargetN<Specs>>;
4
+ //# sourceMappingURL=render-target-multi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target-multi.d.ts","sourceRoot":"","sources":["../../src/render-target/render-target-multi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAmB,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU7G,0FAA0F;AAC1F,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,mBAAmB,EAAE,EACxF,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAkD/B"}
@@ -0,0 +1,90 @@
1
+ import { ValidationError } from "@vgpu/core";
2
+ const DEFAULT_CLEAR_COLOR = Object.freeze({ r: 0, g: 0, b: 0, a: 1 });
3
+ const COLOR_RENDERABLE_FORMATS = new Set([
4
+ "r8unorm", "r8snorm", "r8uint", "r8sint", "rg8unorm", "rg8snorm", "rg8uint", "rg8sint",
5
+ "rgba8unorm", "rgba8unorm-srgb", "rgba8snorm", "rgba8uint", "rgba8sint", "bgra8unorm", "bgra8unorm-srgb",
6
+ "rgb10a2uint", "rgb10a2unorm", "rg11b10ufloat", "rg32uint", "rg32sint", "rg32float",
7
+ "rgba16uint", "rgba16sint", "rgba16float", "rgba32uint", "rgba32sint", "rgba32float",
8
+ ]);
9
+ /** Creates an offscreen render target with N color textures and optional shared depth. */
10
+ export async function renderTargetMulti(spec) {
11
+ validateSpec(spec);
12
+ const size = [spec.size[0], spec.size[1]];
13
+ const depthFormat = spec.depth === true ? "depth24plus" : spec.depth || undefined;
14
+ const colors = spec.colors.map((color, index) => spec.device.createTexture({
15
+ size,
16
+ format: color.format,
17
+ usage: ["render_attachment", "texture_binding"],
18
+ sampleCount: 1,
19
+ label: color.label ?? childLabel(spec.label, `color${index}`),
20
+ }));
21
+ const depth = depthFormat ? spec.device.createTexture({
22
+ size,
23
+ format: depthFormat,
24
+ usage: ["render_attachment"],
25
+ sampleCount: 1,
26
+ label: childLabel(spec.label, "depth"),
27
+ }) : undefined;
28
+ const colorAttachments = Object.freeze(colors.map((color, index) => ({
29
+ view: color.createView(),
30
+ loadOp: "clear",
31
+ storeOp: "store",
32
+ clearValue: colorDict(spec.colors[index]?.clearColor),
33
+ })));
34
+ const depthStencilAttachment = depth ? {
35
+ view: depth.createView(),
36
+ depthLoadOp: "clear",
37
+ depthStoreOp: "store",
38
+ depthClearValue: 1,
39
+ } : undefined;
40
+ const colorTextures = Object.freeze(colors.map((color) => color.gpu));
41
+ const gpu = Object.freeze({
42
+ colorAttachments,
43
+ colorAttachment: colorAttachments[0],
44
+ depthStencilAttachment,
45
+ colorTexture: colorTextures[0],
46
+ colorTextures,
47
+ depthTexture: depth?.gpu,
48
+ });
49
+ const frozenColors = Object.freeze(colors);
50
+ return Object.freeze({
51
+ color: colors[0],
52
+ colors: frozenColors,
53
+ depth,
54
+ size,
55
+ format: spec.colors[0]?.format,
56
+ sampleCount: 1,
57
+ label: spec.label,
58
+ gpu,
59
+ });
60
+ }
61
+ function validateSpec(spec) {
62
+ const maybeMsaa = spec.msaa;
63
+ if (maybeMsaa !== undefined && maybeMsaa !== false)
64
+ throw invalidUsage("RenderTargetMultiSpec.msaa is not supported for MRT v2.");
65
+ const size = spec.size;
66
+ if (size.length !== 2 || !size.every((value) => Number.isInteger(value) && value > 0)) {
67
+ throw invalidUsage("RenderTargetMultiSpec.size must be [width, height] with positive integer values.");
68
+ }
69
+ if (spec.colors.length < 1)
70
+ throw invalidUsage("RenderTargetMultiSpec.colors must contain at least one color attachment.");
71
+ for (const [index, color] of spec.colors.entries()) {
72
+ if (!COLOR_RENDERABLE_FORMATS.has(color.format)) {
73
+ throw invalidUsage(`RenderTargetMultiSpec.colors[${index}].format must be color-renderable; received ${color.format}.`);
74
+ }
75
+ }
76
+ }
77
+ function colorDict(color) {
78
+ if (!color)
79
+ return DEFAULT_CLEAR_COLOR;
80
+ if (Array.isArray(color))
81
+ return { r: color[0], g: color[1], b: color[2], a: color[3] };
82
+ return color;
83
+ }
84
+ function childLabel(label, suffix) {
85
+ return label ? `${label}.${suffix}` : undefined;
86
+ }
87
+ function invalidUsage(message) {
88
+ return new ValidationError({ code: "VGPU-CORE-INVALID-USAGE", message, where: "renderTargetMulti" });
89
+ }
90
+ //# sourceMappingURL=render-target-multi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target-multi.js","sourceRoot":"","sources":["../../src/render-target/render-target-multi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RenderTarget, RenderTargetSpec } from "./types.ts";
2
+ /**
3
+ * Creates an offscreen render target with one sampleable color texture, optional
4
+ * depth, and optional MSAA resolve. Label propagation follows the locked v1
5
+ * decision: non-MSAA uses `${label}.color`; MSAA uses `${label}.color` for the
6
+ * multisample attachment and `${label}.color.resolve` for the exposed sampleable
7
+ * `.color` texture. Depth uses `${label}.depth`.
8
+ */
9
+ export declare function renderTarget(spec: RenderTargetSpec): Promise<RenderTarget>;
10
+ //# sourceMappingURL=render-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target.d.ts","sourceRoot":"","sources":["../../src/render-target/render-target.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAWlF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwDhF"}
@@ -0,0 +1,98 @@
1
+ import { ValidationError } from "@vgpu/core";
2
+ const DEFAULT_FORMAT = "rgba8unorm";
3
+ const DEFAULT_CLEAR_COLOR = Object.freeze({ r: 0, g: 0, b: 0, a: 1 });
4
+ const COLOR_RENDERABLE_FORMATS = new Set([
5
+ "r8unorm", "r8snorm", "r8uint", "r8sint", "rg8unorm", "rg8snorm", "rg8uint", "rg8sint",
6
+ "rgba8unorm", "rgba8unorm-srgb", "rgba8snorm", "rgba8uint", "rgba8sint", "bgra8unorm", "bgra8unorm-srgb",
7
+ "rgb10a2uint", "rgb10a2unorm", "rg11b10ufloat", "rg32uint", "rg32sint", "rg32float",
8
+ "rgba16uint", "rgba16sint", "rgba16float", "rgba32uint", "rgba32sint", "rgba32float",
9
+ ]);
10
+ /**
11
+ * Creates an offscreen render target with one sampleable color texture, optional
12
+ * depth, and optional MSAA resolve. Label propagation follows the locked v1
13
+ * decision: non-MSAA uses `${label}.color`; MSAA uses `${label}.color` for the
14
+ * multisample attachment and `${label}.color.resolve` for the exposed sampleable
15
+ * `.color` texture. Depth uses `${label}.depth`.
16
+ */
17
+ export async function renderTarget(spec) {
18
+ validateSpec(spec);
19
+ const format = spec.format ?? DEFAULT_FORMAT;
20
+ const depthFormat = spec.depth === true ? "depth24plus" : spec.depth || undefined;
21
+ const sampleCount = spec.msaa === true || spec.msaa === 4 ? 4 : 1;
22
+ const clearColor = colorDict(spec.clearColor);
23
+ const size = [spec.size[0], spec.size[1]];
24
+ const color = spec.device.createTexture({
25
+ size,
26
+ format,
27
+ usage: ["render_attachment", "texture_binding"],
28
+ sampleCount,
29
+ label: childLabel(spec.label, "color"),
30
+ });
31
+ const resolve = sampleCount === 4 ? spec.device.createTexture({
32
+ size,
33
+ format,
34
+ usage: ["render_attachment", "texture_binding"],
35
+ sampleCount: 1,
36
+ label: childLabel(spec.label, "color.resolve"),
37
+ }) : undefined;
38
+ const depth = depthFormat ? spec.device.createTexture({
39
+ size,
40
+ format: depthFormat,
41
+ usage: ["render_attachment"],
42
+ sampleCount,
43
+ label: childLabel(spec.label, "depth"),
44
+ }) : undefined;
45
+ const sampleableColor = resolve ?? color;
46
+ const colorAttachment = {
47
+ view: color.createView(),
48
+ resolveTarget: resolve?.createView(),
49
+ loadOp: "clear",
50
+ storeOp: "store",
51
+ clearValue: clearColor,
52
+ };
53
+ const depthStencilAttachment = depth ? {
54
+ view: depth.createView(),
55
+ depthLoadOp: "clear",
56
+ depthStoreOp: "store",
57
+ depthClearValue: 1,
58
+ } : undefined;
59
+ const colorAttachments = Object.freeze([colorAttachment]);
60
+ const colorTextures = Object.freeze([color.gpu]);
61
+ const gpu = Object.freeze({
62
+ colorAttachments,
63
+ colorAttachment,
64
+ depthStencilAttachment,
65
+ colorTexture: color.gpu,
66
+ colorTextures,
67
+ resolveTexture: resolve?.gpu,
68
+ depthTexture: depth?.gpu,
69
+ });
70
+ const colors = Object.freeze([sampleableColor]);
71
+ return Object.freeze({ color: sampleableColor, colors, depth, size, format, sampleCount, label: spec.label, gpu });
72
+ }
73
+ function validateSpec(spec) {
74
+ const size = spec.size;
75
+ if (size.length !== 2 || !size.every((value) => Number.isInteger(value) && value > 0)) {
76
+ throw invalidUsage("RenderTargetSpec.size must be [width, height] with positive integer values.");
77
+ }
78
+ const format = spec.format ?? DEFAULT_FORMAT;
79
+ if (!COLOR_RENDERABLE_FORMATS.has(format))
80
+ throw invalidUsage(`RenderTargetSpec.format must be color-renderable; received ${format}.`);
81
+ if (spec.msaa !== undefined && spec.msaa !== false && spec.msaa !== true && spec.msaa !== 4) {
82
+ throw invalidUsage("RenderTargetSpec.msaa must be true, false, or 4.");
83
+ }
84
+ }
85
+ function colorDict(color) {
86
+ if (!color)
87
+ return DEFAULT_CLEAR_COLOR;
88
+ if (Array.isArray(color))
89
+ return { r: color[0], g: color[1], b: color[2], a: color[3] };
90
+ return color;
91
+ }
92
+ function childLabel(label, suffix) {
93
+ return label ? `${label}.${suffix}` : undefined;
94
+ }
95
+ function invalidUsage(message) {
96
+ return new ValidationError({ code: "VGPU-CORE-INVALID-USAGE", message, where: "renderTarget" });
97
+ }
98
+ //# sourceMappingURL=render-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-target.js","sourceRoot":"","sources":["../../src/render-target/render-target.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { Device, Texture } from "@vgpu/core";
2
+ import type { Material } from "../domain/material.ts";
3
+ import type { Mesh } from "../domain/mesh.ts";
4
+ /** Render target wrapper for color, depth, and optional MSAA attachments. */
5
+ export interface RenderTarget {
6
+ readonly color: Texture;
7
+ readonly colors: readonly [Texture, ...Texture[]];
8
+ readonly depth?: Texture;
9
+ readonly size: readonly [number, number];
10
+ readonly format: GPUTextureFormat;
11
+ readonly sampleCount: 1 | 4;
12
+ readonly label?: string;
13
+ readonly gpu: RenderTargetGpu;
14
+ }
15
+ /** Raw GPU attachments and pass descriptor fragments owned by a render target. */
16
+ export interface RenderTargetGpu {
17
+ readonly colorAttachments: readonly GPURenderPassColorAttachment[];
18
+ /** @deprecated use `colorAttachments[0]`; alias retained for one deprecation cycle. */
19
+ readonly colorAttachment: GPURenderPassColorAttachment;
20
+ readonly depthStencilAttachment?: GPURenderPassDepthStencilAttachment;
21
+ readonly colorTexture: GPUTexture;
22
+ readonly colorTextures: readonly GPUTexture[];
23
+ readonly resolveTexture?: GPUTexture;
24
+ readonly depthTexture?: GPUTexture;
25
+ }
26
+ /** Options for creating a render target. */
27
+ export interface RenderTargetSpec {
28
+ readonly device: Device;
29
+ readonly size: readonly [number, number];
30
+ readonly format?: GPUTextureFormat;
31
+ readonly depth?: boolean | GPUTextureFormat;
32
+ readonly msaa?: boolean | 4;
33
+ readonly label?: string;
34
+ readonly clearColor?: GPUColorDict | readonly [number, number, number, number];
35
+ }
36
+ /** Supported color target inputs for pass(). */
37
+ export type PassTarget = RenderTarget | Texture | GPUTextureView;
38
+ /** Options for rendering one material and mesh into a target. */
39
+ export interface PassSpec {
40
+ readonly material: Material;
41
+ readonly mesh: Mesh;
42
+ readonly target: PassTarget;
43
+ readonly depthTarget?: Texture | GPUTextureView;
44
+ readonly clearColor?: GPUColorDict | readonly [number, number, number, number];
45
+ readonly colorLoadOp?: "clear" | "load";
46
+ readonly depthLoadOp?: "clear" | "load";
47
+ readonly depthClearValue?: number;
48
+ readonly viewport?: readonly [number, number, number, number];
49
+ readonly scissor?: readonly [number, number, number, number];
50
+ readonly encoder?: GPUCommandEncoder;
51
+ /**
52
+ * Reserved for v2: when `material()` gains texture/sampler bindings, this
53
+ * field will accept a typed binding map. Today it is intentionally typed
54
+ * `never[]`, so the field shape exists without accepting any value. Forward-
55
+ * compatibility only — do not pass anything here in v1.
56
+ */
57
+ readonly bindings?: never[];
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/render-target/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/render-target/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { VGPUError, type Device } from "@vgpu/core";
2
+ export declare const defaultCapacityBytes: number;
3
+ export declare const defaultMinOffsetAlignment = 256;
4
+ export declare const defaultMaxUniformBindingSize: number;
5
+ export declare const uniformUsage = 64;
6
+ export declare const copyDstUsage = 8;
7
+ export declare function roundUp(value: number, alignment: number): number;
8
+ export declare function deviceLimit(device: Device, key: keyof GPUSupportedLimits, fallback: number): number;
9
+ export declare function viewBytes(view: ArrayBufferView<ArrayBuffer>): Uint8Array;
10
+ export declare function shaderVisibility(): GPUShaderStageFlags;
11
+ export declare function invalidUsage(where: string, message: string): VGPUError;
12
+ //# sourceMappingURL=uniform-pool-internals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniform-pool-internals.d.ts","sourceRoot":"","sources":["../src/uniform-pool-internals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAAkB,CAAC;AACpD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,4BAA4B,QAAY,CAAC;AACtD,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnG;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,UAAU,CAExE;AAED,wBAAgB,gBAAgB,IAAI,mBAAmB,CAGtD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAEtE"}
@@ -0,0 +1,24 @@
1
+ import { VGPUError } from "@vgpu/core";
2
+ export const defaultCapacityBytes = 4 * 1024 * 1024;
3
+ export const defaultMinOffsetAlignment = 256;
4
+ export const defaultMaxUniformBindingSize = 64 * 1024;
5
+ export const uniformUsage = 64;
6
+ export const copyDstUsage = 8;
7
+ export function roundUp(value, alignment) {
8
+ return Math.ceil(value / alignment) * alignment;
9
+ }
10
+ export function deviceLimit(device, key, fallback) {
11
+ const limits = device.gpu.limits;
12
+ return limits?.[key] ?? fallback;
13
+ }
14
+ export function viewBytes(view) {
15
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
16
+ }
17
+ export function shaderVisibility() {
18
+ const stage = globalThis.GPUShaderStage;
19
+ return ((stage?.VERTEX ?? 1) | (stage?.FRAGMENT ?? 2));
20
+ }
21
+ export function invalidUsage(where, message) {
22
+ return new VGPUError({ code: "VGPU-CORE-INVALID-USAGE", message, where });
23
+ }
24
+ //# sourceMappingURL=uniform-pool-internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniform-pool-internals.js","sourceRoot":"","sources":["../src/uniform-pool-internals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,SAAiB;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,GAA6B,EAAE,QAAgB;IACzF,MAAM,MAAM,GAAI,MAAM,CAAC,GAA2F,CAAC,MAAM,CAAC;IAC1H,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAkC;IAC1D,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,cAAmE,CAAC;IAC7F,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAwB,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IACzD,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC"}