@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.
- package/LICENSE +21 -0
- package/README.md +55 -0
- package/dist/domain/camera.d.ts +10 -0
- package/dist/domain/camera.d.ts.map +1 -0
- package/dist/domain/camera.js +2 -0
- package/dist/domain/camera.js.map +1 -0
- package/dist/domain/capsule-data.d.ts +10 -0
- package/dist/domain/capsule-data.d.ts.map +1 -0
- package/dist/domain/capsule-data.js +61 -0
- package/dist/domain/capsule-data.js.map +1 -0
- package/dist/domain/cone-data.d.ts +13 -0
- package/dist/domain/cone-data.d.ts.map +1 -0
- package/dist/domain/cone-data.js +52 -0
- package/dist/domain/cone-data.js.map +1 -0
- package/dist/domain/cylinder-data.d.ts +14 -0
- package/dist/domain/cylinder-data.d.ts.map +1 -0
- package/dist/domain/cylinder-data.js +58 -0
- package/dist/domain/cylinder-data.js.map +1 -0
- package/dist/domain/deg-to-rad.d.ts +2 -0
- package/dist/domain/deg-to-rad.d.ts.map +1 -0
- package/dist/domain/deg-to-rad.js +4 -0
- package/dist/domain/deg-to-rad.js.map +1 -0
- package/dist/domain/disk-data.d.ts +12 -0
- package/dist/domain/disk-data.d.ts.map +1 -0
- package/dist/domain/disk-data.js +21 -0
- package/dist/domain/disk-data.js.map +1 -0
- package/dist/domain/icosphere-data.d.ts +8 -0
- package/dist/domain/icosphere-data.d.ts.map +1 -0
- package/dist/domain/icosphere-data.js +58 -0
- package/dist/domain/icosphere-data.js.map +1 -0
- package/dist/domain/index.d.ts +40 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +23 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/material-factory.d.ts +34 -0
- package/dist/domain/material-factory.d.ts.map +1 -0
- package/dist/domain/material-factory.js +106 -0
- package/dist/domain/material-factory.js.map +1 -0
- package/dist/domain/material-sampler.d.ts +7 -0
- package/dist/domain/material-sampler.d.ts.map +1 -0
- package/dist/domain/material-sampler.js +11 -0
- package/dist/domain/material-sampler.js.map +1 -0
- package/dist/domain/material-textures-schema.d.ts +29 -0
- package/dist/domain/material-textures-schema.d.ts.map +1 -0
- package/dist/domain/material-textures-schema.js +57 -0
- package/dist/domain/material-textures-schema.js.map +1 -0
- package/dist/domain/material-textures.d.ts +13 -0
- package/dist/domain/material-textures.d.ts.map +1 -0
- package/dist/domain/material-textures.js +91 -0
- package/dist/domain/material-textures.js.map +1 -0
- package/dist/domain/material.d.ts +27 -0
- package/dist/domain/material.d.ts.map +1 -0
- package/dist/domain/material.js +2 -0
- package/dist/domain/material.js.map +1 -0
- package/dist/domain/mesh-box.d.ts +8 -0
- package/dist/domain/mesh-box.d.ts.map +1 -0
- package/dist/domain/mesh-box.js +57 -0
- package/dist/domain/mesh-box.js.map +1 -0
- package/dist/domain/mesh-cache.d.ts +4 -0
- package/dist/domain/mesh-cache.d.ts.map +1 -0
- package/dist/domain/mesh-cache.js +14 -0
- package/dist/domain/mesh-cache.js.map +1 -0
- package/dist/domain/mesh-capsule.d.ts +14 -0
- package/dist/domain/mesh-capsule.d.ts.map +1 -0
- package/dist/domain/mesh-capsule.js +52 -0
- package/dist/domain/mesh-capsule.js.map +1 -0
- package/dist/domain/mesh-cone.d.ts +16 -0
- package/dist/domain/mesh-cone.d.ts.map +1 -0
- package/dist/domain/mesh-cone.js +54 -0
- package/dist/domain/mesh-cone.js.map +1 -0
- package/dist/domain/mesh-cylinder.d.ts +18 -0
- package/dist/domain/mesh-cylinder.d.ts.map +1 -0
- package/dist/domain/mesh-cylinder.js +67 -0
- package/dist/domain/mesh-cylinder.js.map +1 -0
- package/dist/domain/mesh-disk.d.ts +11 -0
- package/dist/domain/mesh-disk.d.ts.map +1 -0
- package/dist/domain/mesh-disk.js +45 -0
- package/dist/domain/mesh-disk.js.map +1 -0
- package/dist/domain/mesh-dodecahedron.d.ts +4 -0
- package/dist/domain/mesh-dodecahedron.d.ts.map +1 -0
- package/dist/domain/mesh-dodecahedron.js +10 -0
- package/dist/domain/mesh-dodecahedron.js.map +1 -0
- package/dist/domain/mesh-fullscreen-quad.d.ts +7 -0
- package/dist/domain/mesh-fullscreen-quad.d.ts.map +1 -0
- package/dist/domain/mesh-fullscreen-quad.js +39 -0
- package/dist/domain/mesh-fullscreen-quad.js.map +1 -0
- package/dist/domain/mesh-icosahedron.d.ts +4 -0
- package/dist/domain/mesh-icosahedron.d.ts.map +1 -0
- package/dist/domain/mesh-icosahedron.js +10 -0
- package/dist/domain/mesh-icosahedron.js.map +1 -0
- package/dist/domain/mesh-icosphere.d.ts +11 -0
- package/dist/domain/mesh-icosphere.d.ts.map +1 -0
- package/dist/domain/mesh-icosphere.js +47 -0
- package/dist/domain/mesh-icosphere.js.map +1 -0
- package/dist/domain/mesh-octahedron.d.ts +4 -0
- package/dist/domain/mesh-octahedron.d.ts.map +1 -0
- package/dist/domain/mesh-octahedron.js +10 -0
- package/dist/domain/mesh-octahedron.js.map +1 -0
- package/dist/domain/mesh-plane.d.ts +13 -0
- package/dist/domain/mesh-plane.d.ts.map +1 -0
- package/dist/domain/mesh-plane.js +51 -0
- package/dist/domain/mesh-plane.js.map +1 -0
- package/dist/domain/mesh-ring.d.ts +12 -0
- package/dist/domain/mesh-ring.d.ts.map +1 -0
- package/dist/domain/mesh-ring.js +47 -0
- package/dist/domain/mesh-ring.js.map +1 -0
- package/dist/domain/mesh-sphere.d.ts +10 -0
- package/dist/domain/mesh-sphere.d.ts.map +1 -0
- package/dist/domain/mesh-sphere.js +51 -0
- package/dist/domain/mesh-sphere.js.map +1 -0
- package/dist/domain/mesh-tetrahedron.d.ts +5 -0
- package/dist/domain/mesh-tetrahedron.d.ts.map +1 -0
- package/dist/domain/mesh-tetrahedron.js +10 -0
- package/dist/domain/mesh-tetrahedron.js.map +1 -0
- package/dist/domain/mesh-torus.d.ts +17 -0
- package/dist/domain/mesh-torus.d.ts.map +1 -0
- package/dist/domain/mesh-torus.js +56 -0
- package/dist/domain/mesh-torus.js.map +1 -0
- package/dist/domain/mesh-types.d.ts +38 -0
- package/dist/domain/mesh-types.d.ts.map +1 -0
- package/dist/domain/mesh-types.js +2 -0
- package/dist/domain/mesh-types.js.map +1 -0
- package/dist/domain/mesh.d.ts +61 -0
- package/dist/domain/mesh.d.ts.map +1 -0
- package/dist/domain/mesh.js +49 -0
- package/dist/domain/mesh.js.map +1 -0
- package/dist/domain/orthographic-camera.d.ts +14 -0
- package/dist/domain/orthographic-camera.d.ts.map +1 -0
- package/dist/domain/orthographic-camera.js +10 -0
- package/dist/domain/orthographic-camera.js.map +1 -0
- package/dist/domain/perspective-camera.d.ts +12 -0
- package/dist/domain/perspective-camera.d.ts.map +1 -0
- package/dist/domain/perspective-camera.js +10 -0
- package/dist/domain/perspective-camera.js.map +1 -0
- package/dist/domain/plane-data.d.ts +12 -0
- package/dist/domain/plane-data.d.ts.map +1 -0
- package/dist/domain/plane-data.js +25 -0
- package/dist/domain/plane-data.js.map +1 -0
- package/dist/domain/polyhedron-data.d.ts +7 -0
- package/dist/domain/polyhedron-data.d.ts.map +1 -0
- package/dist/domain/polyhedron-data.js +42 -0
- package/dist/domain/polyhedron-data.js.map +1 -0
- package/dist/domain/polyhedron-mesh.d.ts +10 -0
- package/dist/domain/polyhedron-mesh.d.ts.map +1 -0
- package/dist/domain/polyhedron-mesh.js +37 -0
- package/dist/domain/polyhedron-mesh.js.map +1 -0
- package/dist/domain/polyhedron-seeds.d.ts +6 -0
- package/dist/domain/polyhedron-seeds.d.ts.map +1 -0
- package/dist/domain/polyhedron-seeds.js +51 -0
- package/dist/domain/polyhedron-seeds.js.map +1 -0
- package/dist/domain/primitive-data-utils.d.ts +9 -0
- package/dist/domain/primitive-data-utils.d.ts.map +1 -0
- package/dist/domain/primitive-data-utils.js +36 -0
- package/dist/domain/primitive-data-utils.js.map +1 -0
- package/dist/domain/ring-data.d.ts +13 -0
- package/dist/domain/ring-data.d.ts.map +1 -0
- package/dist/domain/ring-data.js +24 -0
- package/dist/domain/ring-data.js.map +1 -0
- package/dist/domain/sphere-data.d.ts +11 -0
- package/dist/domain/sphere-data.d.ts.map +1 -0
- package/dist/domain/sphere-data.js +31 -0
- package/dist/domain/sphere-data.js.map +1 -0
- package/dist/domain/srgb.d.ts +5 -0
- package/dist/domain/srgb.d.ts.map +1 -0
- package/dist/domain/srgb.js +11 -0
- package/dist/domain/srgb.js.map +1 -0
- package/dist/domain/torus-data.d.ts +11 -0
- package/dist/domain/torus-data.d.ts.map +1 -0
- package/dist/domain/torus-data.js +38 -0
- package/dist/domain/torus-data.js.map +1 -0
- package/dist/domain/vertex-layout.d.ts +3 -0
- package/dist/domain/vertex-layout.d.ts.map +1 -0
- package/dist/domain/vertex-layout.js +14 -0
- package/dist/domain/vertex-layout.js.map +1 -0
- package/dist/domain/wgsl-alignment.d.ts +17 -0
- package/dist/domain/wgsl-alignment.d.ts.map +1 -0
- package/dist/domain/wgsl-alignment.js +39 -0
- package/dist/domain/wgsl-alignment.js.map +1 -0
- package/dist/edit/edit-source.d.ts +10 -0
- package/dist/edit/edit-source.d.ts.map +1 -0
- package/dist/edit/edit-source.js +9 -0
- package/dist/edit/edit-source.js.map +1 -0
- package/dist/edit/editable-mesh.d.ts +11 -0
- package/dist/edit/editable-mesh.d.ts.map +1 -0
- package/dist/edit/editable-mesh.js +30 -0
- package/dist/edit/editable-mesh.js.map +1 -0
- package/dist/edit/element-set.d.ts +4 -0
- package/dist/edit/element-set.d.ts.map +1 -0
- package/dist/edit/element-set.js +78 -0
- package/dist/edit/element-set.js.map +1 -0
- package/dist/edit/errors.d.ts +11 -0
- package/dist/edit/errors.d.ts.map +1 -0
- package/dist/edit/errors.js +11 -0
- package/dist/edit/errors.js.map +1 -0
- package/dist/edit/half-edge-bake.d.ts +5 -0
- package/dist/edit/half-edge-bake.d.ts.map +1 -0
- package/dist/edit/half-edge-bake.js +30 -0
- package/dist/edit/half-edge-bake.js.map +1 -0
- package/dist/edit/half-edge-build.d.ts +4 -0
- package/dist/edit/half-edge-build.d.ts.map +1 -0
- package/dist/edit/half-edge-build.js +61 -0
- package/dist/edit/half-edge-build.js.map +1 -0
- package/dist/edit/half-edge-kernel.d.ts +21 -0
- package/dist/edit/half-edge-kernel.d.ts.map +1 -0
- package/dist/edit/half-edge-kernel.js +14 -0
- package/dist/edit/half-edge-kernel.js.map +1 -0
- package/dist/edit/half-edge-views.d.ts +8 -0
- package/dist/edit/half-edge-views.d.ts.map +1 -0
- package/dist/edit/half-edge-views.js +40 -0
- package/dist/edit/half-edge-views.js.map +1 -0
- package/dist/edit/index.d.ts +38 -0
- package/dist/edit/index.d.ts.map +1 -0
- package/dist/edit/index.js +20 -0
- package/dist/edit/index.js.map +1 -0
- package/dist/edit/kernel-handle.d.ts +5 -0
- package/dist/edit/kernel-handle.d.ts.map +1 -0
- package/dist/edit/kernel-handle.js +7 -0
- package/dist/edit/kernel-handle.js.map +1 -0
- package/dist/edit/operator-utils.d.ts +33 -0
- package/dist/edit/operator-utils.d.ts.map +1 -0
- package/dist/edit/operator-utils.js +101 -0
- package/dist/edit/operator-utils.js.map +1 -0
- package/dist/edit/operators/bevel.d.ts +18 -0
- package/dist/edit/operators/bevel.d.ts.map +1 -0
- package/dist/edit/operators/bevel.js +65 -0
- package/dist/edit/operators/bevel.js.map +1 -0
- package/dist/edit/operators/bridge.d.ts +14 -0
- package/dist/edit/operators/bridge.d.ts.map +1 -0
- package/dist/edit/operators/bridge.js +55 -0
- package/dist/edit/operators/bridge.js.map +1 -0
- package/dist/edit/operators/dissolve-edges.d.ts +12 -0
- package/dist/edit/operators/dissolve-edges.d.ts.map +1 -0
- package/dist/edit/operators/dissolve-edges.js +55 -0
- package/dist/edit/operators/dissolve-edges.js.map +1 -0
- package/dist/edit/operators/dissolve-faces.d.ts +9 -0
- package/dist/edit/operators/dissolve-faces.d.ts.map +1 -0
- package/dist/edit/operators/dissolve-faces.js +98 -0
- package/dist/edit/operators/dissolve-faces.js.map +1 -0
- package/dist/edit/operators/dissolve-vertices.d.ts +13 -0
- package/dist/edit/operators/dissolve-vertices.d.ts.map +1 -0
- package/dist/edit/operators/dissolve-vertices.js +36 -0
- package/dist/edit/operators/dissolve-vertices.js.map +1 -0
- package/dist/edit/operators/extrude.d.ts +18 -0
- package/dist/edit/operators/extrude.d.ts.map +1 -0
- package/dist/edit/operators/extrude.js +33 -0
- package/dist/edit/operators/extrude.js.map +1 -0
- package/dist/edit/operators/fill-hole.d.ts +12 -0
- package/dist/edit/operators/fill-hole.d.ts.map +1 -0
- package/dist/edit/operators/fill-hole.js +29 -0
- package/dist/edit/operators/fill-hole.js.map +1 -0
- package/dist/edit/operators/grid-fill.d.ts +12 -0
- package/dist/edit/operators/grid-fill.d.ts.map +1 -0
- package/dist/edit/operators/grid-fill.js +20 -0
- package/dist/edit/operators/grid-fill.js.map +1 -0
- package/dist/edit/operators/heal-manifold.d.ts +15 -0
- package/dist/edit/operators/heal-manifold.d.ts.map +1 -0
- package/dist/edit/operators/heal-manifold.js +62 -0
- package/dist/edit/operators/heal-manifold.js.map +1 -0
- package/dist/edit/operators/inset.d.ts +16 -0
- package/dist/edit/operators/inset.d.ts.map +1 -0
- package/dist/edit/operators/inset.js +40 -0
- package/dist/edit/operators/inset.js.map +1 -0
- package/dist/edit/operators/loop-cut.d.ts +14 -0
- package/dist/edit/operators/loop-cut.d.ts.map +1 -0
- package/dist/edit/operators/loop-cut.js +120 -0
- package/dist/edit/operators/loop-cut.js.map +1 -0
- package/dist/edit/operators/merge-by-distance.d.ts +15 -0
- package/dist/edit/operators/merge-by-distance.d.ts.map +1 -0
- package/dist/edit/operators/merge-by-distance.js +78 -0
- package/dist/edit/operators/merge-by-distance.js.map +1 -0
- package/dist/edit/operators/recompute-normals.d.ts +7 -0
- package/dist/edit/operators/recompute-normals.d.ts.map +1 -0
- package/dist/edit/operators/recompute-normals.js +67 -0
- package/dist/edit/operators/recompute-normals.js.map +1 -0
- package/dist/edit/operators/subdivide-edges.d.ts +11 -0
- package/dist/edit/operators/subdivide-edges.d.ts.map +1 -0
- package/dist/edit/operators/subdivide-edges.js +106 -0
- package/dist/edit/operators/subdivide-edges.js.map +1 -0
- package/dist/edit/operators/subdivide-faces.d.ts +11 -0
- package/dist/edit/operators/subdivide-faces.d.ts.map +1 -0
- package/dist/edit/operators/subdivide-faces.js +45 -0
- package/dist/edit/operators/subdivide-faces.js.map +1 -0
- package/dist/edit/selection.d.ts +19 -0
- package/dist/edit/selection.d.ts.map +1 -0
- package/dist/edit/selection.js +21 -0
- package/dist/edit/selection.js.map +1 -0
- package/dist/edit/to-editable.d.ts +9 -0
- package/dist/edit/to-editable.d.ts.map +1 -0
- package/dist/edit/to-editable.js +19 -0
- package/dist/edit/to-editable.js.map +1 -0
- package/dist/edit/types.d.ts +111 -0
- package/dist/edit/types.d.ts.map +1 -0
- package/dist/edit/types.js +2 -0
- package/dist/edit/types.js.map +1 -0
- package/dist/edit/warnings.d.ts +14 -0
- package/dist/edit/warnings.d.ts.map +1 -0
- package/dist/edit/warnings.js +11 -0
- package/dist/edit/warnings.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect/index.d.ts +9 -0
- package/dist/inspect/index.d.ts.map +1 -0
- package/dist/inspect/index.js +5 -0
- package/dist/inspect/index.js.map +1 -0
- package/dist/inspect/inspect-material.d.ts +12 -0
- package/dist/inspect/inspect-material.d.ts.map +1 -0
- package/dist/inspect/inspect-material.js +2 -0
- package/dist/inspect/inspect-material.js.map +1 -0
- package/dist/inspect/mesh-to-readable.d.ts +4 -0
- package/dist/inspect/mesh-to-readable.d.ts.map +1 -0
- package/dist/inspect/mesh-to-readable.js +47 -0
- package/dist/inspect/mesh-to-readable.js.map +1 -0
- package/dist/inspect/mesh-to-wireframe.d.ts +5 -0
- package/dist/inspect/mesh-to-wireframe.d.ts.map +1 -0
- package/dist/inspect/mesh-to-wireframe.js +101 -0
- package/dist/inspect/mesh-to-wireframe.js.map +1 -0
- package/dist/inspect/normal-debug-material.d.ts +8 -0
- package/dist/inspect/normal-debug-material.d.ts.map +1 -0
- package/dist/inspect/normal-debug-material.js +42 -0
- package/dist/inspect/normal-debug-material.js.map +1 -0
- package/dist/inspect/normal-debug-shader.d.ts +2 -0
- package/dist/inspect/normal-debug-shader.d.ts.map +1 -0
- package/dist/inspect/normal-debug-shader.js +32 -0
- package/dist/inspect/normal-debug-shader.js.map +1 -0
- package/dist/inspect/wireframe-material.d.ts +9 -0
- package/dist/inspect/wireframe-material.d.ts.map +1 -0
- package/dist/inspect/wireframe-material.js +45 -0
- package/dist/inspect/wireframe-material.js.map +1 -0
- package/dist/inspect/wireframe-mesh.d.ts +9 -0
- package/dist/inspect/wireframe-mesh.d.ts.map +1 -0
- package/dist/inspect/wireframe-mesh.js +2 -0
- package/dist/inspect/wireframe-mesh.js.map +1 -0
- package/dist/inspect/wireframe-shader.d.ts +2 -0
- package/dist/inspect/wireframe-shader.d.ts.map +1 -0
- package/dist/inspect/wireframe-shader.js +24 -0
- package/dist/inspect/wireframe-shader.js.map +1 -0
- package/dist/passes/index.d.ts +6 -0
- package/dist/passes/index.d.ts.map +1 -0
- package/dist/passes/index.js +5 -0
- package/dist/passes/index.js.map +1 -0
- package/dist/passes/pass-sequence.d.ts +9 -0
- package/dist/passes/pass-sequence.d.ts.map +1 -0
- package/dist/passes/pass-sequence.js +21 -0
- package/dist/passes/pass-sequence.js.map +1 -0
- package/dist/passes/pass.d.ts +4 -0
- package/dist/passes/pass.d.ts.map +1 -0
- package/dist/passes/pass.js +99 -0
- package/dist/passes/pass.js.map +1 -0
- package/dist/pipeline.d.ts +16 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +10 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/rapid-renderer.d.ts +18 -0
- package/dist/rapid-renderer.d.ts.map +1 -0
- package/dist/rapid-renderer.js +58 -0
- package/dist/rapid-renderer.js.map +1 -0
- package/dist/render-pass.d.ts +33 -0
- package/dist/render-pass.d.ts.map +1 -0
- package/dist/render-pass.js +67 -0
- package/dist/render-pass.js.map +1 -0
- package/dist/render-target/render-target-canvas.d.ts +15 -0
- package/dist/render-target/render-target-canvas.d.ts.map +1 -0
- package/dist/render-target/render-target-canvas.js +59 -0
- package/dist/render-target/render-target-canvas.js.map +1 -0
- package/dist/render-target/render-target-multi.d.ts +4 -0
- package/dist/render-target/render-target-multi.d.ts.map +1 -0
- package/dist/render-target/render-target-multi.js +90 -0
- package/dist/render-target/render-target-multi.js.map +1 -0
- package/dist/render-target/render-target.d.ts +10 -0
- package/dist/render-target/render-target.d.ts.map +1 -0
- package/dist/render-target/render-target.js +98 -0
- package/dist/render-target/render-target.js.map +1 -0
- package/dist/render-target/types.d.ts +59 -0
- package/dist/render-target/types.d.ts.map +1 -0
- package/dist/render-target/types.js +2 -0
- package/dist/render-target/types.js.map +1 -0
- package/dist/uniform-pool-internals.d.ts +12 -0
- package/dist/uniform-pool-internals.d.ts.map +1 -0
- package/dist/uniform-pool-internals.js +24 -0
- package/dist/uniform-pool-internals.js.map +1 -0
- package/dist/uniform-pool-types.d.ts +22 -0
- package/dist/uniform-pool-types.d.ts.map +1 -0
- package/dist/uniform-pool-types.js +2 -0
- package/dist/uniform-pool-types.js.map +1 -0
- package/dist/uniform-pool.d.ts +30 -0
- package/dist/uniform-pool.d.ts.map +1 -0
- package/dist/uniform-pool.js +127 -0
- package/dist/uniform-pool.js.map +1 -0
- package/dist/utils/canvas-mouse-tracker.d.ts +11 -0
- package/dist/utils/canvas-mouse-tracker.d.ts.map +1 -0
- package/dist/utils/canvas-mouse-tracker.js +19 -0
- package/dist/utils/canvas-mouse-tracker.js.map +1 -0
- package/dist/utils/canvas-resolution.d.ts +9 -0
- package/dist/utils/canvas-resolution.d.ts.map +1 -0
- package/dist/utils/canvas-resolution.js +16 -0
- package/dist/utils/canvas-resolution.js.map +1 -0
- package/dist/utils/frame-clock.d.ts +10 -0
- package/dist/utils/frame-clock.d.ts.map +1 -0
- package/dist/utils/frame-clock.js +47 -0
- package/dist/utils/frame-clock.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +76 -0
- package/src/RenderPass.docs.md +41 -0
- package/src/createRenderPipeline.docs.md +34 -0
- package/src/domain/camera.docs.md +21 -0
- package/src/domain/deg-to-rad.docs.md +9 -0
- package/src/domain/material-factory.docs.md +59 -0
- package/src/domain/material.docs.md +12 -0
- package/src/domain/mesh.docs.md +28 -0
- package/src/domain/orthographic-camera.docs.md +22 -0
- package/src/domain/perspective-camera.docs.md +20 -0
- package/src/domain/srgb.docs.md +11 -0
- package/src/inspect/inspect-material.docs.md +23 -0
- package/src/inspect/mesh-to-wireframe.docs.md +29 -0
- package/src/inspect/normal-debug-material.docs.md +26 -0
- package/src/inspect/wireframe-material.docs.md +22 -0
- package/src/rapid-renderer.docs.md +18 -0
- package/src/uniform-pool.docs.md +60 -0
- package/src/utils/canvas-mouse-tracker.docs.md +13 -0
- package/src/utils/canvas-resolution.docs.md +13 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"inspect-material.js","sourceRoot":"","sources":["../../src/inspect/inspect-material.ts"],"names":[],"mappings":""}
|
|
@@ -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"}
|