@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Vercel, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# @vgpu/render
|
|
2
|
+
|
|
3
|
+
> 0.0.1 — early preview
|
|
4
|
+
|
|
5
|
+
`@vgpu/render` is the small rendering layer on top of `@vgpu/core`. It currently focuses on two public building blocks: creating a render pipeline from a vgpu shader wrapper, and issuing a render pass against a texture or texture view. The package is intentionally narrow in 0.0.1 and leaves higher-level scene helpers for later releases.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @vgpu/render
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Exports
|
|
14
|
+
|
|
15
|
+
### Runtime
|
|
16
|
+
- `createRenderPipeline`
|
|
17
|
+
- `RenderPass`
|
|
18
|
+
|
|
19
|
+
### Types
|
|
20
|
+
- `RenderPipelineOptions`
|
|
21
|
+
- `ColorAttachment`
|
|
22
|
+
- `RenderPassOptions`
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { App } from "@vgpu/core";
|
|
28
|
+
import { createMockAdapter } from "@vgpu/adapter-mock";
|
|
29
|
+
import { createRenderPipeline, RenderPass } from "@vgpu/render";
|
|
30
|
+
|
|
31
|
+
const { device } = await App.create({ adapter: createMockAdapter() });
|
|
32
|
+
const shader = device.createShader(`
|
|
33
|
+
@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
|
|
34
|
+
var p = array<vec2f, 3>(vec2f(0.0, 0.5), vec2f(-0.5, -0.5), vec2f(0.5, -0.5));
|
|
35
|
+
return vec4f(p[i], 0.0, 1.0);
|
|
36
|
+
}
|
|
37
|
+
@fragment fn fs_main() -> @location(0) vec4f { return vec4f(0.2, 0.6, 1.0, 1.0); }
|
|
38
|
+
`);
|
|
39
|
+
const target = device.createTexture({ size: [64, 64], format: "rgba8unorm", usage: ["render_attachment", "copy_src"] });
|
|
40
|
+
const pipeline = createRenderPipeline(device, {
|
|
41
|
+
shader,
|
|
42
|
+
vertex: { entry: "vs_main" },
|
|
43
|
+
fragment: { entry: "fs_main", targets: [{ format: "rgba8unorm" }] },
|
|
44
|
+
});
|
|
45
|
+
const pass = new RenderPass(device, {
|
|
46
|
+
colorAttachments: [{ view: target, loadOp: "clear", storeOp: "store", clearValue: [0, 0, 0, 1] }],
|
|
47
|
+
});
|
|
48
|
+
pass.setPipeline(pipeline);
|
|
49
|
+
pass.draw(3);
|
|
50
|
+
pass.end();
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
MIT.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Mat4, Vec3 } from "wgpu-matrix";
|
|
2
|
+
/** A pure camera value containing the matrix shaders need for drawing. */
|
|
3
|
+
export interface Camera {
|
|
4
|
+
/** Column-major projection times view matrix, computed once at construction. */
|
|
5
|
+
readonly viewProjectionMatrix: Mat4;
|
|
6
|
+
/** Camera position in world space. */
|
|
7
|
+
readonly position: Vec3;
|
|
8
|
+
}
|
|
9
|
+
export type { Mat4, Vec3 };
|
|
10
|
+
//# sourceMappingURL=camera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/domain/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,MAAM;IACrB,gFAAgF;IAChF,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACpC,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB;AAED,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/domain/camera.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type StandardData } from "./primitive-data-utils.ts";
|
|
2
|
+
export interface CapsuleDataSpec {
|
|
3
|
+
readonly radius: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
readonly radialSegments: number;
|
|
6
|
+
readonly heightSegments: number;
|
|
7
|
+
readonly shading: "flat" | "smooth";
|
|
8
|
+
}
|
|
9
|
+
export declare function capsuleData(spec: CapsuleDataSpec): StandardData;
|
|
10
|
+
//# sourceMappingURL=capsule-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule-data.d.ts","sourceRoot":"","sources":["../../src/domain/capsule-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAG/D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
|
|
2
|
+
export function capsuleData(spec) {
|
|
3
|
+
const smooth = capsuleSmoothData(spec);
|
|
4
|
+
return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
|
|
5
|
+
}
|
|
6
|
+
function capsuleSmoothData(spec) {
|
|
7
|
+
const vertices = [];
|
|
8
|
+
const indices = [];
|
|
9
|
+
const rows = 3 * spec.heightSegments + 1;
|
|
10
|
+
const total = spec.height + Math.PI * spec.radius;
|
|
11
|
+
for (let row = 0; row < rows; row++)
|
|
12
|
+
addRow(vertices, spec, row, total);
|
|
13
|
+
const stride = spec.radialSegments + 1;
|
|
14
|
+
for (let j = 0; j < rows - 1; j++) {
|
|
15
|
+
for (let i = 0; i < spec.radialSegments; i++) {
|
|
16
|
+
const a = j * stride + i;
|
|
17
|
+
const b = a + 1;
|
|
18
|
+
const d = (j + 1) * stride + i;
|
|
19
|
+
const c = d + 1;
|
|
20
|
+
indices.push(a, b, d, b, c, d);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
|
|
24
|
+
}
|
|
25
|
+
function addRow(vertices, spec, row, total) {
|
|
26
|
+
const { radius, height, radialSegments, heightSegments } = spec;
|
|
27
|
+
const bottomEnd = heightSegments;
|
|
28
|
+
const cylinderEnd = bottomEnd + heightSegments;
|
|
29
|
+
let y = 0;
|
|
30
|
+
let ringRadius = radius;
|
|
31
|
+
let ny = 0;
|
|
32
|
+
let vDistance = 0;
|
|
33
|
+
if (row <= bottomEnd) {
|
|
34
|
+
const angle = -Math.PI / 2 + (row / heightSegments) * (Math.PI / 2);
|
|
35
|
+
ringRadius = radius * Math.cos(angle);
|
|
36
|
+
y = -height / 2 + radius * Math.sin(angle);
|
|
37
|
+
ny = row === 0 ? -1 : Math.sin(angle);
|
|
38
|
+
vDistance = (angle + Math.PI / 2) * radius;
|
|
39
|
+
}
|
|
40
|
+
else if (row <= cylinderEnd) {
|
|
41
|
+
const t = (row - bottomEnd) / heightSegments;
|
|
42
|
+
y = -height / 2 + t * height;
|
|
43
|
+
vDistance = Math.PI * radius / 2 + t * height;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const angle = ((row - cylinderEnd) / heightSegments) * (Math.PI / 2);
|
|
47
|
+
ringRadius = radius * Math.cos(angle);
|
|
48
|
+
y = height / 2 + radius * Math.sin(angle);
|
|
49
|
+
ny = row === 3 * heightSegments ? 1 : Math.sin(angle);
|
|
50
|
+
vDistance = Math.PI * radius / 2 + height + angle * radius;
|
|
51
|
+
}
|
|
52
|
+
const radial = Math.sqrt(Math.max(0, 1 - ny * ny));
|
|
53
|
+
for (let i = 0; i <= radialSegments; i++) {
|
|
54
|
+
const u = i / radialSegments;
|
|
55
|
+
const theta = u * Math.PI * 2;
|
|
56
|
+
const cos = Math.cos(theta);
|
|
57
|
+
const sin = Math.sin(theta);
|
|
58
|
+
pushVertex(vertices, ringRadius * cos, y, -ringRadius * sin, radial * cos, ny, -radial * sin, u, total > 0 ? vDistance / total : 0);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=capsule-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule-data.js","sourceRoot":"","sources":["../../src/domain/capsule-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type StandardData } from "./primitive-data-utils.ts";
|
|
2
|
+
export interface ConeDataSpec {
|
|
3
|
+
readonly radius: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
readonly radialSegments: number;
|
|
6
|
+
readonly heightSegments: number;
|
|
7
|
+
readonly openEnded: boolean;
|
|
8
|
+
readonly thetaStart: number;
|
|
9
|
+
readonly thetaLength: number;
|
|
10
|
+
readonly shading: "flat" | "smooth";
|
|
11
|
+
}
|
|
12
|
+
export declare function coneData(spec: ConeDataSpec): StandardData;
|
|
13
|
+
//# sourceMappingURL=cone-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cone-data.d.ts","sourceRoot":"","sources":["../../src/domain/cone-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAGzD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
|
|
2
|
+
export function coneData(spec) {
|
|
3
|
+
const smooth = coneSmoothData(spec);
|
|
4
|
+
return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
|
|
5
|
+
}
|
|
6
|
+
function coneSmoothData(spec) {
|
|
7
|
+
const { radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength } = spec;
|
|
8
|
+
const vertices = [];
|
|
9
|
+
const indices = [];
|
|
10
|
+
const row = radialSegments + 1;
|
|
11
|
+
for (let j = 0; j <= heightSegments; j++) {
|
|
12
|
+
const v = j / heightSegments;
|
|
13
|
+
const y = -height / 2 + v * height;
|
|
14
|
+
const r = radius * (1 - v);
|
|
15
|
+
for (let i = 0; i <= radialSegments; i++) {
|
|
16
|
+
const u = i / radialSegments;
|
|
17
|
+
const theta = thetaStart + u * thetaLength;
|
|
18
|
+
const cos = Math.cos(theta);
|
|
19
|
+
const sin = Math.sin(theta);
|
|
20
|
+
const n = normalized(cos * height, radius, -sin * height);
|
|
21
|
+
pushVertex(vertices, r * cos, y, -r * sin, n[0], n[1], n[2], u, v);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
for (let j = 0; j < heightSegments; j++) {
|
|
25
|
+
for (let i = 0; i < radialSegments; i++) {
|
|
26
|
+
const a = j * row + i;
|
|
27
|
+
const b = a + 1;
|
|
28
|
+
const d = (j + 1) * row + i;
|
|
29
|
+
const c = d + 1;
|
|
30
|
+
indices.push(a, b, d, b, c, d);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!openEnded)
|
|
34
|
+
addBaseCap(vertices, indices, spec);
|
|
35
|
+
return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
|
|
36
|
+
}
|
|
37
|
+
function addBaseCap(vertices, indices, spec) {
|
|
38
|
+
const { radius, height, radialSegments, thetaStart, thetaLength } = spec;
|
|
39
|
+
const center = vertices.length / 8;
|
|
40
|
+
pushVertex(vertices, 0, -height / 2, 0, 0, -1, 0, 0.5, 0.5);
|
|
41
|
+
const rim = vertices.length / 8;
|
|
42
|
+
for (let i = 0; i <= radialSegments; i++) {
|
|
43
|
+
const u = i / radialSegments;
|
|
44
|
+
const theta = thetaStart + u * thetaLength;
|
|
45
|
+
const x = Math.cos(theta);
|
|
46
|
+
const z = -Math.sin(theta);
|
|
47
|
+
pushVertex(vertices, radius * x, -height / 2, radius * z, 0, -1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < radialSegments; i++)
|
|
50
|
+
indices.push(center, rim + i + 1, rim + i);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cone-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cone-data.js","sourceRoot":"","sources":["../../src/domain/cone-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type StandardData } from "./primitive-data-utils.ts";
|
|
2
|
+
export interface CylinderDataSpec {
|
|
3
|
+
readonly radiusTop: number;
|
|
4
|
+
readonly radiusBottom: number;
|
|
5
|
+
readonly height: number;
|
|
6
|
+
readonly radialSegments: number;
|
|
7
|
+
readonly heightSegments: number;
|
|
8
|
+
readonly openEnded: boolean;
|
|
9
|
+
readonly thetaStart: number;
|
|
10
|
+
readonly thetaLength: number;
|
|
11
|
+
readonly shading: "flat" | "smooth";
|
|
12
|
+
}
|
|
13
|
+
export declare function cylinderData(spec: CylinderDataSpec): StandardData;
|
|
14
|
+
//# sourceMappingURL=cylinder-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cylinder-data.d.ts","sourceRoot":"","sources":["../../src/domain/cylinder-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAGjE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
|
|
2
|
+
export function cylinderData(spec) {
|
|
3
|
+
const smooth = cylinderSmoothData(spec);
|
|
4
|
+
return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
|
|
5
|
+
}
|
|
6
|
+
function cylinderSmoothData(spec) {
|
|
7
|
+
const vertices = [];
|
|
8
|
+
const indices = [];
|
|
9
|
+
const { radialSegments, heightSegments, radiusTop, radiusBottom, height, thetaStart, thetaLength } = spec;
|
|
10
|
+
const row = radialSegments + 1;
|
|
11
|
+
for (let j = 0; j <= heightSegments; j++) {
|
|
12
|
+
const v = j / heightSegments;
|
|
13
|
+
const y = -height / 2 + v * height;
|
|
14
|
+
const r = radiusBottom + (radiusTop - radiusBottom) * v;
|
|
15
|
+
for (let i = 0; i <= radialSegments; i++) {
|
|
16
|
+
const u = i / radialSegments;
|
|
17
|
+
const theta = thetaStart + u * thetaLength;
|
|
18
|
+
const cos = Math.cos(theta);
|
|
19
|
+
const sin = Math.sin(theta);
|
|
20
|
+
const n = normalized(cos * height, radiusBottom - radiusTop, -sin * height);
|
|
21
|
+
pushVertex(vertices, r * cos, y, -r * sin, n[0], n[1], n[2], u, v);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
for (let j = 0; j < heightSegments; j++)
|
|
25
|
+
for (let i = 0; i < radialSegments; i++) {
|
|
26
|
+
const a = j * row + i;
|
|
27
|
+
const b = a + 1;
|
|
28
|
+
const d = (j + 1) * row + i;
|
|
29
|
+
const c = d + 1;
|
|
30
|
+
indices.push(a, b, d, b, c, d);
|
|
31
|
+
}
|
|
32
|
+
if (!spec.openEnded) {
|
|
33
|
+
if (radiusTop > 0)
|
|
34
|
+
addCap(vertices, indices, spec, "top");
|
|
35
|
+
if (radiusBottom > 0)
|
|
36
|
+
addCap(vertices, indices, spec, "bottom");
|
|
37
|
+
}
|
|
38
|
+
return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: vertices.length / 8 };
|
|
39
|
+
}
|
|
40
|
+
function addCap(vertices, indices, spec, cap) {
|
|
41
|
+
const { radialSegments, thetaStart, thetaLength } = spec;
|
|
42
|
+
const top = cap === "top";
|
|
43
|
+
const y = top ? spec.height / 2 : -spec.height / 2;
|
|
44
|
+
const radius = top ? spec.radiusTop : spec.radiusBottom;
|
|
45
|
+
const center = vertices.length / 8;
|
|
46
|
+
pushVertex(vertices, 0, y, 0, 0, top ? 1 : -1, 0, 0.5, 0.5);
|
|
47
|
+
const rim = vertices.length / 8;
|
|
48
|
+
for (let i = 0; i <= radialSegments; i++) {
|
|
49
|
+
const u = i / radialSegments;
|
|
50
|
+
const theta = thetaStart + u * thetaLength;
|
|
51
|
+
const x = Math.cos(theta);
|
|
52
|
+
const z = -Math.sin(theta);
|
|
53
|
+
pushVertex(vertices, radius * x, y, radius * z, 0, top ? 1 : -1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
|
|
54
|
+
}
|
|
55
|
+
for (let i = 0; i < radialSegments; i++)
|
|
56
|
+
indices.push(center, top ? rim + i : rim + i + 1, top ? rim + i + 1 : rim + i);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=cylinder-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cylinder-data.js","sourceRoot":"","sources":["../../src/domain/cylinder-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AAcvG,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAsB;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC1G,MAAM,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACnC,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;YAC7B,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;YAC5E,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACjF,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC;YAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,YAAY,GAAG,CAAC;YAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,SAAS,MAAM,CAAC,QAAkB,EAAE,OAAiB,EAAE,IAAsB,EAAE,GAAqB;IAClG,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACzD,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deg-to-rad.d.ts","sourceRoot":"","sources":["../../src/domain/deg-to-rad.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deg-to-rad.js","sourceRoot":"","sources":["../../src/domain/deg-to-rad.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface DiskDataSpec {
|
|
2
|
+
readonly radius: number;
|
|
3
|
+
readonly segments: number;
|
|
4
|
+
readonly thetaStart: number;
|
|
5
|
+
readonly thetaLength: number;
|
|
6
|
+
}
|
|
7
|
+
export interface DiskData {
|
|
8
|
+
readonly vertices: Float32Array<ArrayBuffer>;
|
|
9
|
+
readonly indices: Uint16Array<ArrayBuffer>;
|
|
10
|
+
}
|
|
11
|
+
export declare function diskData(spec: DiskDataSpec): DiskData;
|
|
12
|
+
//# sourceMappingURL=disk-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk-data.d.ts","sourceRoot":"","sources":["../../src/domain/disk-data.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAC5C;AAID,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAqBrD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const TWO_PI = Math.PI * 2;
|
|
2
|
+
export function diskData(spec) {
|
|
3
|
+
const { radius, segments, thetaStart, thetaLength } = spec;
|
|
4
|
+
const vertices = [0, 0, 0, 0, 1, 0, 0.5, 0.5];
|
|
5
|
+
const indices = [];
|
|
6
|
+
const closed = Math.abs(thetaLength - TWO_PI) < 1e-12;
|
|
7
|
+
const rimCount = closed ? segments : segments + 1;
|
|
8
|
+
for (let i = 0; i < rimCount; i++) {
|
|
9
|
+
const t = closed ? i / segments : i / (rimCount - 1);
|
|
10
|
+
const theta = thetaStart + t * thetaLength;
|
|
11
|
+
const x = Math.cos(theta);
|
|
12
|
+
const z = -Math.sin(theta);
|
|
13
|
+
vertices.push(radius * x, 0, radius * z, 0, 1, 0, 0.5 + 0.5 * x, 0.5 - 0.5 * z);
|
|
14
|
+
}
|
|
15
|
+
for (let i = 0; i < segments; i++) {
|
|
16
|
+
const next = closed && i === segments - 1 ? 1 : i + 2;
|
|
17
|
+
indices.push(0, i + 1, next);
|
|
18
|
+
}
|
|
19
|
+
return { vertices: new Float32Array(vertices), indices: new Uint16Array(indices) };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=disk-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk-data.js","sourceRoot":"","sources":["../../src/domain/disk-data.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAE3B,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC3D,MAAM,QAAQ,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;IAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type StandardData } from "./primitive-data-utils.ts";
|
|
2
|
+
export interface IcosphereDataSpec {
|
|
3
|
+
readonly radius: number;
|
|
4
|
+
readonly subdivisions: number;
|
|
5
|
+
readonly shading: "flat" | "smooth";
|
|
6
|
+
}
|
|
7
|
+
export declare function icosphereData(spec: IcosphereDataSpec): StandardData;
|
|
8
|
+
//# sourceMappingURL=icosphere-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icosphere-data.d.ts","sourceRoot":"","sources":["../../src/domain/icosphere-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEvG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CACrC;AAeD,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAiBnE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { normalized, pushVertex, toFlatTriangles } from "./primitive-data-utils.js";
|
|
2
|
+
const T = (1 + Math.sqrt(5)) / 2;
|
|
3
|
+
const SEED = [
|
|
4
|
+
[-1, T, 0], [1, T, 0], [-1, -T, 0], [1, -T, 0],
|
|
5
|
+
[0, -1, T], [0, 1, T], [0, -1, -T], [0, 1, -T],
|
|
6
|
+
[T, 0, -1], [T, 0, 1], [-T, 0, -1], [-T, 0, 1],
|
|
7
|
+
];
|
|
8
|
+
const FACES = [
|
|
9
|
+
[0, 11, 5], [0, 5, 1], [0, 1, 7], [0, 7, 10], [0, 10, 11],
|
|
10
|
+
[1, 5, 9], [5, 11, 4], [11, 10, 2], [10, 7, 6], [7, 1, 8],
|
|
11
|
+
[3, 9, 4], [3, 4, 2], [3, 2, 6], [3, 6, 8], [3, 8, 9],
|
|
12
|
+
[4, 9, 5], [2, 4, 11], [6, 2, 10], [8, 6, 7], [9, 8, 1],
|
|
13
|
+
];
|
|
14
|
+
export function icosphereData(spec) {
|
|
15
|
+
const positions = SEED.map((p) => {
|
|
16
|
+
const n = normalized(p[0], p[1], p[2]);
|
|
17
|
+
return [n[0], n[1], n[2]];
|
|
18
|
+
});
|
|
19
|
+
let faces = FACES.map((face) => [...face]);
|
|
20
|
+
for (let i = 0; i < spec.subdivisions; i++)
|
|
21
|
+
faces = subdivide(positions, faces);
|
|
22
|
+
const vertices = [];
|
|
23
|
+
for (const p of positions) {
|
|
24
|
+
const u = Math.atan2(p[2], p[0]) / (Math.PI * 2) + 0.5;
|
|
25
|
+
const v = Math.asin(p[1]) / Math.PI + 0.5;
|
|
26
|
+
pushVertex(vertices, p[0] * spec.radius, p[1] * spec.radius, p[2] * spec.radius, p[0], p[1], p[2], u, v);
|
|
27
|
+
}
|
|
28
|
+
const indices = faces.flat();
|
|
29
|
+
const smooth = { vertices: new Float32Array(vertices), indices: new Uint16Array(indices), vertexCount: positions.length };
|
|
30
|
+
return spec.shading === "flat" ? toFlatTriangles(smooth) : smooth;
|
|
31
|
+
}
|
|
32
|
+
function subdivide(positions, faces) {
|
|
33
|
+
const next = [];
|
|
34
|
+
const midpointCache = new Map();
|
|
35
|
+
for (const [a, b, c] of faces) {
|
|
36
|
+
const ab = midpoint(positions, midpointCache, a, b);
|
|
37
|
+
const bc = midpoint(positions, midpointCache, b, c);
|
|
38
|
+
const ca = midpoint(positions, midpointCache, c, a);
|
|
39
|
+
next.push([a, ab, ca], [b, bc, ab], [c, ca, bc], [ab, bc, ca]);
|
|
40
|
+
}
|
|
41
|
+
return next;
|
|
42
|
+
}
|
|
43
|
+
function midpoint(positions, cache, a, b) {
|
|
44
|
+
const lo = Math.min(a, b);
|
|
45
|
+
const hi = Math.max(a, b);
|
|
46
|
+
const key = `${lo}|${hi}`;
|
|
47
|
+
const cached = cache.get(key);
|
|
48
|
+
if (cached !== undefined)
|
|
49
|
+
return cached;
|
|
50
|
+
const pa = positions[a];
|
|
51
|
+
const pb = positions[b];
|
|
52
|
+
const p = normalized(pa[0] + pb[0], pa[1] + pb[1], pa[2] + pb[2]);
|
|
53
|
+
const index = positions.length;
|
|
54
|
+
positions.push([p[0], p[1], p[2]]);
|
|
55
|
+
cache.set(key, index);
|
|
56
|
+
return index;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=icosphere-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icosphere-data.js","sourceRoot":"","sources":["../../src/domain/icosphere-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export { degToRad } from "./deg-to-rad.ts";
|
|
2
|
+
export { orthographicCamera } from "./orthographic-camera.ts";
|
|
3
|
+
export { Mesh } from "./mesh.ts";
|
|
4
|
+
export { box } from "./mesh-box.ts";
|
|
5
|
+
export { capsule } from "./mesh-capsule.ts";
|
|
6
|
+
export { cone } from "./mesh-cone.ts";
|
|
7
|
+
export { cylinder } from "./mesh-cylinder.ts";
|
|
8
|
+
export { disk } from "./mesh-disk.ts";
|
|
9
|
+
export { dodecahedron } from "./mesh-dodecahedron.ts";
|
|
10
|
+
export { fullscreenQuad } from "./mesh-fullscreen-quad.ts";
|
|
11
|
+
export { icosahedron } from "./mesh-icosahedron.ts";
|
|
12
|
+
export { icosphere } from "./mesh-icosphere.ts";
|
|
13
|
+
export { plane } from "./mesh-plane.ts";
|
|
14
|
+
export { ring } from "./mesh-ring.ts";
|
|
15
|
+
export { sphere } from "./mesh-sphere.ts";
|
|
16
|
+
export { tetrahedron } from "./mesh-tetrahedron.ts";
|
|
17
|
+
export { torus } from "./mesh-torus.ts";
|
|
18
|
+
export { octahedron } from "./mesh-octahedron.ts";
|
|
19
|
+
export { material } from "./material-factory.ts";
|
|
20
|
+
export { sampler } from "./material-sampler.ts";
|
|
21
|
+
export { perspectiveCamera } from "./perspective-camera.ts";
|
|
22
|
+
export { srgb } from "./srgb.ts";
|
|
23
|
+
export type { Camera, Mat4, Vec3 } from "./camera.ts";
|
|
24
|
+
export type { Material, MaterialUniformValue } from "./material.ts";
|
|
25
|
+
export type { MaterialSamplerSpec, MaterialSpec, MaterialTextureSpec, SamplerSpec, TextureKind, TextureSpec, TextureValue, VertexLayoutKind, WgslUniformType, WriteTextureValues } from "./material-factory.ts";
|
|
26
|
+
export type { Sampler } from "./material-sampler.ts";
|
|
27
|
+
export type { BoxSpec } from "./mesh-box.ts";
|
|
28
|
+
export type { CapsuleSpec } from "./mesh-capsule.ts";
|
|
29
|
+
export type { ConeSpec } from "./mesh-cone.ts";
|
|
30
|
+
export type { CylinderSpec } from "./mesh-cylinder.ts";
|
|
31
|
+
export type { DiskSpec } from "./mesh-disk.ts";
|
|
32
|
+
export type { Mesh as MeshPrimitive, MeshGpu, VertexAttributes } from "./mesh-types.ts";
|
|
33
|
+
export type { FullscreenQuadSpec } from "./mesh-fullscreen-quad.ts";
|
|
34
|
+
export type { IcosphereSpec } from "./mesh-icosphere.ts";
|
|
35
|
+
export type { PlaneSpec } from "./mesh-plane.ts";
|
|
36
|
+
export type { PolyhedronSpec } from "./polyhedron-mesh.ts";
|
|
37
|
+
export type { RingSpec } from "./mesh-ring.ts";
|
|
38
|
+
export type { SphereSpec } from "./mesh-sphere.ts";
|
|
39
|
+
export type { TorusSpec } from "./mesh-torus.ts";
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChN,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { degToRad } from "./deg-to-rad.js";
|
|
2
|
+
export { orthographicCamera } from "./orthographic-camera.js";
|
|
3
|
+
export { Mesh } from "./mesh.js";
|
|
4
|
+
export { box } from "./mesh-box.js";
|
|
5
|
+
export { capsule } from "./mesh-capsule.js";
|
|
6
|
+
export { cone } from "./mesh-cone.js";
|
|
7
|
+
export { cylinder } from "./mesh-cylinder.js";
|
|
8
|
+
export { disk } from "./mesh-disk.js";
|
|
9
|
+
export { dodecahedron } from "./mesh-dodecahedron.js";
|
|
10
|
+
export { fullscreenQuad } from "./mesh-fullscreen-quad.js";
|
|
11
|
+
export { icosahedron } from "./mesh-icosahedron.js";
|
|
12
|
+
export { icosphere } from "./mesh-icosphere.js";
|
|
13
|
+
export { plane } from "./mesh-plane.js";
|
|
14
|
+
export { ring } from "./mesh-ring.js";
|
|
15
|
+
export { sphere } from "./mesh-sphere.js";
|
|
16
|
+
export { tetrahedron } from "./mesh-tetrahedron.js";
|
|
17
|
+
export { torus } from "./mesh-torus.js";
|
|
18
|
+
export { octahedron } from "./mesh-octahedron.js";
|
|
19
|
+
export { material } from "./material-factory.js";
|
|
20
|
+
export { sampler } from "./material-sampler.js";
|
|
21
|
+
export { perspectiveCamera } from "./perspective-camera.js";
|
|
22
|
+
export { srgb } from "./srgb.js";
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Device } from "@vgpu/core";
|
|
2
|
+
import type { Material, MaterialGpu } from "./material.ts";
|
|
3
|
+
import { type WgslUniformType } from "./wgsl-alignment.ts";
|
|
4
|
+
import type { MaterialSamplerSpec, MaterialTextureSpec, WriteTextureValues } from "./material-textures-schema.ts";
|
|
5
|
+
export type { WgslUniformType } from "./wgsl-alignment.ts";
|
|
6
|
+
export type { MaterialSamplerSpec, MaterialTextureSpec, SamplerSpec, TextureKind, TextureSpec, TextureValue, WriteTextureValues } from "./material-textures-schema.ts";
|
|
7
|
+
export type VertexLayoutKind = "position-only" | "position-normal" | "position-normal-uv" | "position-uv";
|
|
8
|
+
export type UniformValue = number | readonly number[] | Float32Array | Uint32Array | Int32Array;
|
|
9
|
+
export interface MaterialSpec<U extends Record<string, WgslUniformType> = Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>> {
|
|
10
|
+
readonly device: Device;
|
|
11
|
+
readonly vertex: string;
|
|
12
|
+
readonly fragment: string;
|
|
13
|
+
readonly uniforms: U;
|
|
14
|
+
readonly textures?: T;
|
|
15
|
+
readonly samplers?: S;
|
|
16
|
+
readonly vertexLayout: VertexLayoutKind;
|
|
17
|
+
readonly targetFormat?: GPUTextureFormat;
|
|
18
|
+
readonly depthFormat?: GPUTextureFormat | null;
|
|
19
|
+
}
|
|
20
|
+
export interface FactoryMaterial<U extends Record<string, WgslUniformType> = Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>> extends Material {
|
|
21
|
+
readonly bindGroup: GPUBindGroup;
|
|
22
|
+
readonly uniformOffsets: Readonly<Record<keyof U, number>>;
|
|
23
|
+
readonly textureBindings: Readonly<Record<keyof T, number>>;
|
|
24
|
+
readonly samplerBindings: Readonly<Record<string, number>>;
|
|
25
|
+
readonly gpu: MaterialGpu & {
|
|
26
|
+
readonly bindGroup: GPUBindGroup;
|
|
27
|
+
readonly uniformBuffer: GPUBuffer;
|
|
28
|
+
readonly defaultSampler?: GPUSampler;
|
|
29
|
+
};
|
|
30
|
+
readonly writeUniforms: (values: Record<keyof U, UniformValue>) => void;
|
|
31
|
+
readonly writeTextures: (values: WriteTextureValues<T>) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function material<U extends Record<string, WgslUniformType>, T extends Record<string, MaterialTextureSpec> = Record<string, never>, S extends Record<string, MaterialSamplerSpec> = Record<string, never>>(spec: MaterialSpec<U, T, S>): FactoryMaterial<U, T, S>;
|
|
34
|
+
//# sourceMappingURL=material-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"material-factory.d.ts","sourceRoot":"","sources":["../../src/domain/material-factory.ts"],"names":[],"mappings":"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"}
|