@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,106 @@
1
+ import { selection } from "../selection.js";
2
+ import { addTri, build, edgeVerts, faceVerts, key, p, requireSelection } from "../operator-utils.js";
3
+ import { unwrapKernel } from "../kernel-handle.js";
4
+ export function subdivideEdges(em, edges, opts = {}) {
5
+ requireSelection(edges, "edge");
6
+ const cuts = Math.max(1, Math.floor(opts.cuts ?? 1)), selected = new Set(edges.indices), k = unwrapKernel(em.gpu.halfEdgeKernel);
7
+ const parts = { positions: [], faces: [], useSmooth: [], sharp: new Set() }, newVertexKeys = new Set(), childKeys = new Set();
8
+ const points = new Map();
9
+ for (const e of selected) {
10
+ const [a, b] = edgeVerts(em, e), av = p(em, a), bv = p(em, b), ps = [av];
11
+ for (let i = 1; i <= cuts; i++) {
12
+ const v = lerp(av, bv, i / (cuts + 1));
13
+ ps.push(v);
14
+ newVertexKeys.add(key(v, v));
15
+ }
16
+ ps.push(bv);
17
+ points.set(e, ps);
18
+ for (let i = 0; i < ps.length - 1; i++) {
19
+ childKeys.add(key(ps[i], ps[i + 1]));
20
+ if (k.isSharp[e])
21
+ parts.sharp.add(key(ps[i], ps[i + 1]));
22
+ }
23
+ }
24
+ for (let f = 0; f < em.faceCount; f++)
25
+ emitFace(em, f, selected, points, parts);
26
+ copyUnselectedSharp(em, selected, parts);
27
+ const mesh = build(parts), newVertices = verticesByKeys(mesh, newVertexKeys), newEdges = edgesByKeys(mesh, childKeys);
28
+ tintFaces(mesh, facesOfEdges(mesh, newEdges.indices));
29
+ return { mesh, newVertices, newEdges };
30
+ }
31
+ function emitFace(em, f, selected, points, parts) {
32
+ const k = unwrapKernel(em.gpu.halfEdgeKernel), verts = faceVerts(em, f).map((i) => p(em, i)), edges = Array.from(k.faceEdges.slice(f * 3, f * 3 + 3)), picked = edges.map((e) => selected.has(e));
33
+ const n = picked.filter(Boolean).length, smooth = k.useSmooth[f];
34
+ if (n === 0) {
35
+ addTri(parts, verts[0], verts[1], verts[2], smooth);
36
+ return;
37
+ }
38
+ if (n === 1) {
39
+ const i = picked.findIndex(Boolean), ps = oriented(points.get(edges[i]), verts[i], verts[(i + 1) % 3]), o = verts[(i + 2) % 3];
40
+ for (let j = 0; j < ps.length - 1; j++)
41
+ addTri(parts, o, ps[j], ps[j + 1], smooth);
42
+ return;
43
+ }
44
+ if (n === 2) {
45
+ emitTwoCut(verts, edges, picked, points, parts, smooth);
46
+ return;
47
+ }
48
+ emitThreeCut(verts, edges, points, parts, smooth);
49
+ }
50
+ function emitTwoCut(verts, edges, picked, points, parts, smooth) {
51
+ const u = picked.findIndex((v, i) => !v && picked[(i + 1) % 3] && picked[(i + 2) % 3]), apex = verts[(u + 2) % 3];
52
+ const left = oriented(points.get(edges[(u + 2) % 3]), apex, verts[u]), right = oriented(points.get(edges[(u + 1) % 3]), apex, verts[(u + 1) % 3]);
53
+ for (let i = 0; i < left.length - 1; i++) {
54
+ if (i === 0)
55
+ addTri(parts, apex, right[1], left[1], smooth);
56
+ else {
57
+ addTri(parts, left[i], right[i], right[i + 1], smooth);
58
+ addTri(parts, left[i], right[i + 1], left[i + 1], smooth);
59
+ }
60
+ }
61
+ }
62
+ function emitThreeCut(verts, edges, points, parts, smooth) {
63
+ const e01 = oriented(points.get(edges[0]), verts[0], verts[1]), e12 = oriented(points.get(edges[1]), verts[1], verts[2]), e02 = oriented(points.get(edges[2]), verts[0], verts[2]);
64
+ const s = e01.length - 1, grid = new Map();
65
+ for (let j = 0; j <= s; j++)
66
+ for (let i = 0; i <= s - j; i++)
67
+ grid.set(`${i}:${j}`, boundary(i, j, s, e01, e12, e02, verts));
68
+ for (let j = 0; j < s; j++)
69
+ for (let i = 0; i < s - j; i++) {
70
+ addTri(parts, at(grid, i, j), at(grid, i + 1, j), at(grid, i, j + 1), smooth);
71
+ if (i < s - j - 1)
72
+ addTri(parts, at(grid, i + 1, j), at(grid, i + 1, j + 1), at(grid, i, j + 1), smooth);
73
+ }
74
+ }
75
+ function boundary(i, j, s, e01, e12, e02, v) {
76
+ if (j === 0)
77
+ return e01[i];
78
+ if (i === 0)
79
+ return e02[j];
80
+ if (i + j === s)
81
+ return e12[j];
82
+ const a = (s - i - j) / s, b = i / s, c = j / s;
83
+ return [v[0][0] * a + v[1][0] * b + v[2][0] * c, v[0][1] * a + v[1][1] * b + v[2][1] * c, v[0][2] * a + v[1][2] * b + v[2][2] * c];
84
+ }
85
+ function at(grid, i, j) { return grid.get(`${i}:${j}`); }
86
+ function oriented(ps, a, b) { return key(ps[0], a) === key(a, a) && key(ps[ps.length - 1], b) === key(b, b) ? ps : [...ps].reverse(); }
87
+ function lerp(a, b, t) { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t]; }
88
+ function copyUnselectedSharp(em, selected, parts) { const k = unwrapKernel(em.gpu.halfEdgeKernel); for (let e = 0; e < k.edgeCount; e++)
89
+ if (!selected.has(e) && k.isSharp[e])
90
+ parts.sharp.add(key(p(em, k.edgeVertexA[e]), p(em, k.edgeVertexB[e]))); }
91
+ function verticesByKeys(em, keys) { const out = [], a = unwrapKernel(em.gpu.halfEdgeKernel).positions; for (let v = 0; v < em.vertexCount; v++)
92
+ if (keys.has(key(pos(a, v), pos(a, v))))
93
+ out.push(v); return selection("vertex", out); }
94
+ function edgesByKeys(em, keys) { const out = [], k = unwrapKernel(em.gpu.halfEdgeKernel); for (let e = 0; e < em.edgeCount; e++)
95
+ if (keys.has(key(pos(k.positions, k.edgeVertexA[e]), pos(k.positions, k.edgeVertexB[e]))))
96
+ out.push(e); return selection("edge", out); }
97
+ function facesOfEdges(em, edges) { const k = unwrapKernel(em.gpu.halfEdgeKernel), out = new Set(); for (const e of edges) {
98
+ if (k.edgeFaceA[e] >= 0)
99
+ out.add(k.edgeFaceA[e]);
100
+ if (k.edgeFaceB[e] >= 0)
101
+ out.add(k.edgeFaceB[e]);
102
+ } return [...out]; }
103
+ function tintFaces(em, faces) { const n = unwrapKernel(em.gpu.halfEdgeKernel).faceNormals; for (const f of faces)
104
+ n.set([0.577, 0.577, 0.577], f * 3); }
105
+ function pos(a, v) { const i = v * 3; return [a[i], a[i + 1], a[i + 2]]; }
106
+ //# sourceMappingURL=subdivide-edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subdivide-edges.js","sourceRoot":"","sources":["../../../src/edit/operators/subdivide-edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { EditableMesh, ElementSelection } from "../types.ts";
2
+ export interface SubdivideFacesOptions {
3
+ readonly cuts?: number;
4
+ }
5
+ export interface SubdivideFacesResult {
6
+ readonly mesh: EditableMesh;
7
+ readonly newFaces: ElementSelection;
8
+ readonly newEdges: ElementSelection;
9
+ }
10
+ export declare function subdivideFaces(em: EditableMesh, faces: ElementSelection, opts?: SubdivideFacesOptions): SubdivideFacesResult;
11
+ //# sourceMappingURL=subdivide-faces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subdivide-faces.d.ts","sourceRoot":"","sources":["../../../src/edit/operators/subdivide-faces.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AACjE,MAAM,WAAW,oBAAoB;IAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE;AAE/I,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,GAAE,qBAA0B,GAAG,oBAAoB,CAKhI"}
@@ -0,0 +1,45 @@
1
+ import { selection } from "../selection.js";
2
+ import { addTri, build, faceVerts, key, p, requireSelection } from "../operator-utils.js";
3
+ import { unwrapKernel } from "../kernel-handle.js";
4
+ export function subdivideFaces(em, faces, opts = {}) {
5
+ requireSelection(faces, "face");
6
+ let result = once(em, faces);
7
+ for (let i = 1; i < Math.max(1, Math.floor(opts.cuts ?? 1)); i++)
8
+ result = once(result.mesh, result.newFaces);
9
+ return result;
10
+ }
11
+ function once(em, faces) {
12
+ const selected = new Set(faces.indices), parts = { positions: [], faces: [], useSmooth: [], sharp: new Set() }, k = unwrapKernel(em.gpu.halfEdgeKernel);
13
+ const newFaces = [], newEdgeKeys = new Set();
14
+ for (let f = 0; f < em.faceCount; f++) {
15
+ const v = faceVerts(em, f).map((i) => p(em, i)), smooth = k.useSmooth[f];
16
+ if (!selected.has(f)) {
17
+ addTri(parts, v[0], v[1], v[2], smooth);
18
+ copySharp(em, parts, f);
19
+ continue;
20
+ }
21
+ const m = [mid(v[0], v[1]), mid(v[1], v[2]), mid(v[2], v[0])];
22
+ newFaces.push(addTri(parts, v[0], m[0], m[2], smooth), addTri(parts, m[0], v[1], m[1], smooth), addTri(parts, m[2], m[1], v[2], smooth), addTri(parts, m[0], m[1], m[2], smooth));
23
+ for (const [a, b] of [[v[0], m[0]], [m[0], v[1]], [v[1], m[1]], [m[1], v[2]], [v[2], m[2]], [m[2], v[0]], [m[0], m[1]], [m[1], m[2]], [m[2], m[0]]])
24
+ newEdgeKeys.add(key(a, b));
25
+ for (let i = 0; i < 3; i++)
26
+ if (k.isSharp[k.faceEdges[f * 3 + i]]) {
27
+ parts.sharp.add(key(v[i], m[i]));
28
+ parts.sharp.add(key(m[i], v[(i + 1) % 3]));
29
+ }
30
+ }
31
+ const mesh = build(parts), descFaces = selection("face", newFaces);
32
+ tintFaces(mesh, descFaces.indices);
33
+ return { mesh, newFaces: descFaces, newEdges: edgesByKeys(mesh, newEdgeKeys) };
34
+ }
35
+ function copySharp(em, parts, f) { const k = unwrapKernel(em.gpu.halfEdgeKernel); for (const e of k.faceEdges.slice(f * 3, f * 3 + 3))
36
+ if (k.isSharp[e])
37
+ parts.sharp.add(key(p(em, k.edgeVertexA[e]), p(em, k.edgeVertexB[e]))); }
38
+ function mid(a, b) { return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2]; }
39
+ function edgesByKeys(em, keys) { const out = [], k = unwrapKernel(em.gpu.halfEdgeKernel); for (let e = 0; e < em.edgeCount; e++)
40
+ if (keys.has(key(pos(k.positions, k.edgeVertexA[e]), pos(k.positions, k.edgeVertexB[e]))))
41
+ out.push(e); return selection("edge", out); }
42
+ function tintFaces(em, faces) { const n = unwrapKernel(em.gpu.halfEdgeKernel).faceNormals; for (const f of faces)
43
+ n.set([0.577, 0.577, 0.577], f * 3); }
44
+ function pos(a, v) { const i = v * 3; return [a[i], a[i + 1], a[i + 2]]; }
45
+ //# sourceMappingURL=subdivide-faces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subdivide-faces.js","sourceRoot":"","sources":["../../../src/edit/operators/subdivide-faces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,gBAAgB,EAA0B,MAAM,sBAAsB,CAAC;AAGlH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,UAAU,cAAc,CAAC,EAAgB,EAAE,KAAuB,EAAE,OAA8B,EAAE;IACxG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9G,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,EAAgB,EAAE,KAAuB;IACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,GAAc,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnK,MAAM,QAAQ,GAAa,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAClL,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAa;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5L,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;IACtJ,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,SAAS,CAAC,EAAgB,EAAE,KAAgB,EAAE,CAAS,IAAU,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzQ,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,IAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG,SAAS,WAAW,CAAC,EAAgB,EAAE,IAAiB,IAAsB,MAAM,GAAG,GAAa,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE;IAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChU,SAAS,SAAS,CAAC,EAAgB,EAAE,KAAwB,IAAU,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK;IAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/L,SAAS,GAAG,CAAC,CAAe,EAAE,CAAS,IAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ElementDomain, ElementSelection, ScoredSelection } from "./types.ts";
2
+ export declare function selection(domain: ElementDomain, indices: readonly number[], ordered?: boolean): ElementSelection;
3
+ export declare class MeshScoredSelection implements ScoredSelection {
4
+ readonly domain: ElementDomain;
5
+ readonly entries: ReadonlyArray<{
6
+ readonly index: number;
7
+ readonly score: number;
8
+ }>;
9
+ constructor(domain: ElementDomain, entries: readonly {
10
+ readonly index: number;
11
+ readonly score: number;
12
+ }[]);
13
+ top(): ElementSelection;
14
+ topN(n: number): ElementSelection;
15
+ threshold(min: number): ElementSelection;
16
+ bottom(): ElementSelection;
17
+ bottomN(n: number): ElementSelection;
18
+ }
19
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/edit/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,UAAQ,GAAG,gBAAgB,CAG9G;AAED,qBAAa,mBAAoB,YAAW,eAAe;IAE7C,QAAQ,CAAC,MAAM,EAAE,aAAa;IAD1C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAC/D,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;IAGlH,GAAG,IAAI,gBAAgB;IACvB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,gBAAgB;IACjC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IACxC,MAAM,IAAI,gBAAgB;IAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,gBAAgB;CAIrC"}
@@ -0,0 +1,21 @@
1
+ export function selection(domain, indices, ordered = false) {
2
+ const out = ordered ? [...indices] : [...new Set(indices)].sort((a, b) => a - b);
3
+ return Object.freeze({ domain, indices: Object.freeze(out), count: out.length, ...(ordered ? { ordered: true } : {}) });
4
+ }
5
+ export class MeshScoredSelection {
6
+ domain;
7
+ entries;
8
+ constructor(domain, entries) {
9
+ this.domain = domain;
10
+ this.entries = Object.freeze([...entries].sort((a, b) => b.score - a.score || a.index - b.index));
11
+ }
12
+ top() { return this.topN(1); }
13
+ topN(n) { return selection(this.domain, this.entries.slice(0, Math.max(0, n)).map((e) => e.index)); }
14
+ threshold(min) { return selection(this.domain, this.entries.filter((e) => e.score >= min).map((e) => e.index)); }
15
+ bottom() { return this.bottomN(1); }
16
+ bottomN(n) {
17
+ const out = [...this.entries].sort((a, b) => a.score - b.score || a.index - b.index).slice(0, Math.max(0, n));
18
+ return selection(this.domain, out.map((e) => e.index));
19
+ }
20
+ }
21
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/edit/selection.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,MAAqB,EAAE,OAA0B,EAAE,OAAO,GAAG,KAAK;IAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,OAAO,mBAAmB;IAET;IADZ,OAAO,CAAoE;IACpF,YAAqB,MAAqB,EAAE,OAAsE;QAA7F,WAAM,GAAN,MAAM,CAAe;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,GAAG,KAAuB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,CAAS,IAAsB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/H,SAAS,CAAC,GAAW,IAAsB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3I,MAAM,KAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,CAAS;QACf,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9G,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { Mesh } from "../domain/mesh.ts";
2
+ import { MeshEditWarning } from "./warnings.ts";
3
+ import type { EditableMesh as EditableMeshType, ToEditableOptions } from "./types.ts";
4
+ export declare function toEditable(mesh: Mesh, opts?: ToEditableOptions): EditableMeshType;
5
+ export declare function toEditableWithDiagnostics(mesh: Mesh, opts?: ToEditableOptions): {
6
+ readonly mesh: EditableMeshType;
7
+ readonly warnings: readonly MeshEditWarning[];
8
+ };
9
+ //# sourceMappingURL=to-editable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-editable.d.ts","sourceRoot":"","sources":["../../src/edit/to-editable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAEjF;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAKlK"}
@@ -0,0 +1,19 @@
1
+ import { MeshEditWarning } from "./warnings.js";
2
+ import { EditableMesh } from "./editable-mesh.js";
3
+ import { sourceOf } from "./edit-source.js";
4
+ export function toEditable(mesh, opts) {
5
+ return toEditableWithDiagnostics(mesh, opts).mesh;
6
+ }
7
+ export function toEditableWithDiagnostics(mesh, opts) {
8
+ const warnings = mesh.attributes.tangent ? [new MeshEditWarning("TANGENTS_STRIPPED", "Tangents are render-layer data and were stripped.")] : [];
9
+ const source = sourceOf(mesh);
10
+ const arrays = source ? { ...source } : boxArrays(mesh);
11
+ return { mesh: EditableMesh.fromArrays({ ...arrays, creaseAngle: opts?.creaseAngle }), warnings };
12
+ }
13
+ function boxArrays(mesh) {
14
+ const min = mesh.bbox.min, max = mesh.bbox.max, x0 = min[0], y0 = min[1], z0 = min[2], x1 = max[0], y1 = max[1], z1 = max[2];
15
+ const p = new Float32Array([x0, y0, z0, x1, y0, z0, x1, y1, z0, x0, y1, z0, x0, y0, z1, x1, y0, z1, x1, y1, z1, x0, y1, z1]);
16
+ const f = [1, 2, 6, 1, 6, 5, 4, 7, 3, 4, 3, 0, 3, 7, 6, 3, 6, 2, 4, 0, 1, 4, 1, 5, 4, 5, 6, 4, 6, 7, 1, 0, 3, 1, 3, 2];
17
+ return { positions: p, indices: new Uint32Array(f) };
18
+ }
19
+ //# sourceMappingURL=to-editable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-editable.js","sourceRoot":"","sources":["../../src/edit/to-editable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,IAAwB;IAC7D,OAAO,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAU,EAAE,IAAwB;IAC5E,MAAM,QAAQ,GAAI,IAAI,CAAC,UAAoC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,mBAAmB,EAAE,mDAAmD,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3K,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,SAAS,CAAC,IAAU;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7H,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7H,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvH,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,111 @@
1
+ import type { Device } from "@vgpu/core";
2
+ import type { Vec3 } from "wgpu-matrix";
3
+ import type { Mesh } from "../domain/mesh.ts";
4
+ declare const kernelBrand: unique symbol;
5
+ export type KernelHandle = {
6
+ readonly [kernelBrand]: never;
7
+ };
8
+ export type ElementDomain = "vertex" | "edge" | "face" | "loop";
9
+ export interface ElementSelection {
10
+ readonly domain: ElementDomain;
11
+ readonly indices: ReadonlyArray<number>;
12
+ readonly count: number;
13
+ readonly ordered?: boolean;
14
+ }
15
+ export interface ScoredSelection {
16
+ readonly domain: ElementDomain;
17
+ readonly entries: ReadonlyArray<{
18
+ readonly index: number;
19
+ readonly score: number;
20
+ }>;
21
+ top(): ElementSelection;
22
+ topN(n: number): ElementSelection;
23
+ threshold(min: number): ElementSelection;
24
+ bottom(): ElementSelection;
25
+ bottomN(n: number): ElementSelection;
26
+ }
27
+ export interface VertexView {
28
+ readonly index: number;
29
+ readonly position: Vec3;
30
+ readonly normal: Vec3;
31
+ readonly valence: number;
32
+ readonly isBoundary: boolean;
33
+ readonly isManifold: boolean;
34
+ }
35
+ export interface EdgeView {
36
+ readonly index: number;
37
+ readonly midpoint: Vec3;
38
+ readonly length: number;
39
+ readonly direction: Vec3;
40
+ readonly vertexA: number;
41
+ readonly vertexB: number;
42
+ readonly faceA: number | null;
43
+ readonly faceB: number | null;
44
+ readonly isBoundary: boolean;
45
+ readonly isManifold: boolean;
46
+ readonly isSharp: boolean;
47
+ }
48
+ export interface FaceView {
49
+ readonly index: number;
50
+ readonly center: Vec3;
51
+ readonly normal: Vec3;
52
+ readonly area: number;
53
+ readonly vertexCount: number;
54
+ readonly vertexIndices: ReadonlyArray<number>;
55
+ readonly edgeIndices: ReadonlyArray<number>;
56
+ readonly useSmooth: boolean;
57
+ }
58
+ export type ElementView<D extends ElementDomain> = D extends "vertex" ? VertexView : D extends "edge" ? EdgeView : D extends "face" ? FaceView : never;
59
+ export interface ElementSet<D extends ElementDomain> {
60
+ readonly domain: D;
61
+ readonly count: number;
62
+ where(pred: (e: ElementView<D>) => boolean): ElementSelection;
63
+ scoreBy(score: (e: ElementView<D>) => number): ScoredSelection;
64
+ byIndex(indices: readonly number[]): ElementSelection;
65
+ all(): ElementSelection;
66
+ none(): ElementSelection;
67
+ loop(seedEdge: number): D extends "edge" ? ElementSelection : never;
68
+ ring(seedEdge: number): D extends "edge" ? ElementSelection : never;
69
+ grow(sel: ElementSelection, layers?: number): ElementSelection;
70
+ shrink(sel: ElementSelection, layers?: number): ElementSelection;
71
+ boundaryOf(sel: ElementSelection): ElementSelection;
72
+ connectedComponentOf(seed: number): ElementSelection;
73
+ }
74
+ export interface EditableMesh {
75
+ readonly vertexCount: number;
76
+ readonly edgeCount: number;
77
+ readonly faceCount: number;
78
+ readonly bounds: {
79
+ readonly min: Vec3;
80
+ readonly max: Vec3;
81
+ };
82
+ readonly vertices: ElementSet<"vertex">;
83
+ readonly edges: ElementSet<"edge">;
84
+ readonly faces: ElementSet<"face">;
85
+ readonly isManifold: boolean;
86
+ readonly hasUVs: boolean;
87
+ readonly hasNormals: boolean;
88
+ readonly hasVertexColors: boolean;
89
+ readonly hardEdges: ElementSelection;
90
+ readonly gpu: {
91
+ readonly halfEdgeKernel: KernelHandle;
92
+ };
93
+ toRenderMesh(opts: {
94
+ readonly device: Device;
95
+ }): Mesh;
96
+ }
97
+ export interface FromArraysOptions {
98
+ readonly positions: Float32Array;
99
+ readonly normals?: Float32Array;
100
+ readonly uvs?: Float32Array;
101
+ readonly colors?: Float32Array;
102
+ readonly indices?: Uint16Array | Uint32Array;
103
+ readonly sharpEdges?: Uint8Array;
104
+ readonly useSmooth?: Uint8Array;
105
+ readonly creaseAngle?: number;
106
+ }
107
+ export interface ToEditableOptions {
108
+ readonly creaseAngle?: number;
109
+ }
110
+ export {};
111
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/edit/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/edit/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ export type MeshEditWarningCode = "NON_MANIFOLD_EDGE_SKIPPED" | "NON_MANIFOLD_VERTEX_SKIPPED" | "DEGENERATE_FACE_DROPPED" | "TANGENTS_STRIPPED" | "BEVEL_ACUTE_CLAMPED" | "BEVEL_SEGMENTS_CLAMPED" | "INSET_OVERLAP_CLAMPED" | "SEAM_DESTROYED" | "BRIDGE_LOOP_LENGTH_MISMATCH" | "FILL_NON_PLANAR_BOUNDARY" | "LOOP_CUT_AMBIGUOUS_CONTINUATION" | "FILL_HOLE_TRIANGULATED" | "GRID_FILL_TRIANGULATED" | "DISSOLVE_FACES_RETRIANGULATED" | "MERGE_DEGENERATE_FACES_REMOVED" | "HEAL_NON_MANIFOLD_RESIDUE";
2
+ export declare class MeshEditWarning {
3
+ readonly code: MeshEditWarningCode;
4
+ readonly reason: string;
5
+ readonly element?: {
6
+ readonly domain: "vertex" | "edge" | "face";
7
+ readonly index: number;
8
+ } | undefined;
9
+ constructor(code: MeshEditWarningCode, reason: string, element?: {
10
+ readonly domain: "vertex" | "edge" | "face";
11
+ readonly index: number;
12
+ } | undefined);
13
+ }
14
+ //# sourceMappingURL=warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../src/edit/warnings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,2BAA2B,GAAG,6BAA6B,GAAG,yBAAyB,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,gBAAgB,GAAG,6BAA6B,GAAG,0BAA0B,GAAG,iCAAiC,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,+BAA+B,GAAG,gCAAgC,GAAG,2BAA2B,CAAC;AAC1e,qBAAa,eAAe;IACd,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE;gBAA9I,IAAI,EAAE,mBAAmB,EAAW,MAAM,EAAE,MAAM,EAAW,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,YAAA;CACpK"}
@@ -0,0 +1,11 @@
1
+ export class MeshEditWarning {
2
+ code;
3
+ reason;
4
+ element;
5
+ constructor(code, reason, element) {
6
+ this.code = code;
7
+ this.reason = reason;
8
+ this.element = element;
9
+ }
10
+ }
11
+ //# sourceMappingURL=warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnings.js","sourceRoot":"","sources":["../../src/edit/warnings.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,eAAe;IACL;IAAoC;IAAyB;IAAlF,YAAqB,IAAyB,EAAW,MAAc,EAAW,OAAiF;QAA9I,SAAI,GAAJ,IAAI,CAAqB;QAAW,WAAM,GAAN,MAAM,CAAQ;QAAW,YAAO,GAAP,OAAO,CAA0E;IAAG,CAAC;CACxK"}
@@ -0,0 +1,11 @@
1
+ export { createRenderPipeline } from "./pipeline.ts";
2
+ export { RenderPass } from "./render-pass.ts";
3
+ export { RapidRenderer } from "./rapid-renderer.ts";
4
+ export { UniformPool } from "./uniform-pool.ts";
5
+ export type { RenderPipelineOptions } from "./pipeline.ts";
6
+ export type { DrawSpec } from "./rapid-renderer.ts";
7
+ export type { UniformLayout, UniformPoolOptions, UniformSlot } from "./uniform-pool-types.ts";
8
+ export type { ColorAttachment, RenderPassDrawOptions, RenderPassDynamicOffsets, RenderPassOptions, } from "./render-pass.ts";
9
+ export { box, capsule, cone, cylinder, degToRad, disk, dodecahedron, fullscreenQuad, icosahedron, icosphere, material, Mesh, octahedron, orthographicCamera, perspectiveCamera, plane, ring, sampler, sphere, srgb, tetrahedron, torus } from "./domain/index.ts";
10
+ export type { BoxSpec, Camera, CapsuleSpec, ConeSpec, CylinderSpec, DiskSpec, FullscreenQuadSpec, IcosphereSpec, Material, MaterialSamplerSpec, MaterialSpec, MaterialTextureSpec, MaterialUniformValue, Mat4, MeshGpu, MeshPrimitive, PlaneSpec, PolyhedronSpec, RingSpec, Sampler, SamplerSpec, SphereSpec, TextureKind, TextureSpec, TextureValue, TorusSpec, Vec3, VertexAttributes, VertexLayoutKind, WgslUniformType, WriteTextureValues } from "./domain/index.ts";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9F,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClQ,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createRenderPipeline } from "./pipeline.js";
2
+ export { RenderPass } from "./render-pass.js";
3
+ export { RapidRenderer } from "./rapid-renderer.js";
4
+ export { UniformPool } from "./uniform-pool.js";
5
+ export { box, capsule, cone, cylinder, degToRad, disk, dodecahedron, fullscreenQuad, icosahedron, icosphere, material, Mesh, octahedron, orthographicCamera, perspectiveCamera, plane, ring, sampler, sphere, srgb, tetrahedron, torus } from "./domain/index.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUhD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { wireframeMaterial } from "./wireframe-material.ts";
2
+ export type { WireframeMaterialSpec } from "./wireframe-material.ts";
3
+ export { normalDebugMaterial } from "./normal-debug-material.ts";
4
+ export type { NormalDebugMaterialSpec } from "./normal-debug-material.ts";
5
+ export { meshToReadable } from "./mesh-to-readable.ts";
6
+ export { meshToWireframe } from "./mesh-to-wireframe.ts";
7
+ export type { WireframeMesh } from "./wireframe-mesh.ts";
8
+ export type { InspectMaterial, InspectMaterialUniformParams } from "./inspect-material.ts";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inspect/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { wireframeMaterial } from "./wireframe-material.js";
2
+ export { normalDebugMaterial } from "./normal-debug-material.js";
3
+ export { meshToReadable } from "./mesh-to-readable.js";
4
+ export { meshToWireframe } from "./mesh-to-wireframe.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inspect/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Mat4 } from "../domain/index.ts";
2
+ export interface InspectMaterial {
3
+ readonly pipeline: GPURenderPipeline;
4
+ readonly bindGroupLayout: GPUBindGroupLayout;
5
+ readonly uniformByteSize: number;
6
+ readonly writeUniforms: (buffer: GPUBuffer, offset: number, params: InspectMaterialUniformParams) => void;
7
+ }
8
+ export interface InspectMaterialUniformParams {
9
+ readonly viewProjectionMatrix: Mat4;
10
+ readonly modelMatrix: Mat4;
11
+ }
12
+ //# sourceMappingURL=inspect-material.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-material.d.ts","sourceRoot":"","sources":["../../src/inspect/inspect-material.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAC;CAC3G;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspect-material.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-material.js","sourceRoot":"","sources":["../../src/inspect/inspect-material.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { type Device } from "@vgpu/core";
2
+ import type { Mesh } from "../domain/mesh.ts";
3
+ export declare function meshToReadable(mesh: Mesh, device: Device): Promise<Mesh>;
4
+ //# sourceMappingURL=mesh-to-readable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-to-readable.d.ts","sourceRoot":"","sources":["../../src/inspect/mesh-to-readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9E"}
@@ -0,0 +1,47 @@
1
+ import { Buffer, ValidationError } from "@vgpu/core";
2
+ export async function meshToReadable(mesh, device) {
3
+ const usage = mesh.vertexBuffer.gpu.usage;
4
+ if (!Number.isFinite(usage))
5
+ throw invalidUsageError();
6
+ if ((usage & copySrcUsage()) !== 0)
7
+ return mesh;
8
+ const options = mesh.vertexBuffer.options;
9
+ const nextUsage = options.usage.includes("copy_dst")
10
+ ? [...options.usage, "copy_src"]
11
+ : [...options.usage, "copy_dst", "copy_src"];
12
+ const gpu = device.gpu.createBuffer({
13
+ label: `${options.label ?? "meshToReadable.vertex"}.readable`,
14
+ size: options.size,
15
+ usage: usage | copySrcUsage() | copyDstUsage(),
16
+ });
17
+ const encoder = device.gpu.createCommandEncoder();
18
+ encoder.copyBufferToBuffer(mesh.vertexBuffer.gpu, 0, gpu, 0, options.size);
19
+ device.queue.gpu.submit([encoder.finish()]);
20
+ const srcGpu = mesh.vertexBuffer.gpu;
21
+ const dstGpu = gpu;
22
+ if (srcGpu.__vgpuMockBytes && dstGpu.__vgpuMockBytes) {
23
+ dstGpu.__vgpuMockBytes.set(srcGpu.__vgpuMockBytes);
24
+ }
25
+ await device.queue.gpu.onSubmittedWorkDone?.();
26
+ return Object.freeze({
27
+ ...mesh,
28
+ vertexBuffer: new Buffer(device, gpu, { ...options, usage: uniqueUsage(nextUsage) }),
29
+ });
30
+ }
31
+ function uniqueUsage(usage) {
32
+ return Array.from(new Set(usage));
33
+ }
34
+ function copySrcUsage() {
35
+ return (globalThis.GPUBufferUsage?.COPY_SRC ?? 4);
36
+ }
37
+ function copyDstUsage() {
38
+ return (globalThis.GPUBufferUsage?.COPY_DST ?? 8);
39
+ }
40
+ function invalidUsageError() {
41
+ return new ValidationError({
42
+ code: "VGPU-CORE-INVALID-USAGE",
43
+ message: "meshToReadable requires a vertex buffer with a valid GPUBuffer.usage flag mask.",
44
+ where: "meshToReadable",
45
+ });
46
+ }
47
+ //# sourceMappingURL=mesh-to-readable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-to-readable.js","sourceRoot":"","sources":["../../src/inspect/mesh-to-readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAIlE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,MAAc;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,iBAAiB,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC1C,MAAM,SAAS,GAAsB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;QAChC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,uBAAuB,WAAW;QAC7D,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,GAAG,YAAY,EAAE;KAC/C,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;IAClD,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAuC,CAAC;IACzE,MAAM,MAAM,GAAG,GAAuC,CAAC;IACvD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACrD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,IAAI;QACP,YAAY,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;KACrF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAiC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,IAAI,CAAC,CAAwB,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,IAAI,CAAC,CAAwB,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,iFAAiF;QAC1F,KAAK,EAAE,gBAAgB;KACxB,CAAC,CAAC;AACL,CAAC"}