//! # Mesh module — geometry sources for WSG //! //! This module is the single entry point for **where geometry data comes from**: //! //! - **`primitives`** — procedural generators (cube, sphere, torus, …), each behind a //! feature flag so you only compile what you need. //! - **`import`** — file loaders (OBJ, glTF), each behind a feature flag. //! //! All sources produce a [`Geometry`] (CPU-side vertex data: positions, normals, UVs, //! indices). Turning that into a GPU renderable is the job of [`crate::scene::Scene::add_mesh`]. //! //! ## Usage //! //! ```rust //! use wsg_lib::mesh::cube; //! //! // Procedural (feature "prim-cube") //! let geom = cube(2.0); //! assert_eq!(geom.positions.len(), 24); //! ``` //! //! ## Features //! //! | Feature | Provides | //! |---------|----------| //! | `prim-cube` | `cube(size)` | //! | `prim-sphere` | `uv_sphere(…)`, `icosphere(…)` | //! | `prim-cylinder` | `cylinder(…)` | //! | `prim-cone` | `cone(…)` | //! | `prim-torus` | `torus(…)` | //! | `prim-plane` | `plane(…)` | //! | `all-prims` | all of the above | //! | `import-obj` | `load_obj(path)` | //! | `import-gltf` | `load_gltf(path)` | pub mod primitives; #[cfg(feature = "import-obj")] pub mod import; // Flat re-exports at the `wsg::mesh` level for convenience. #[cfg(feature = "prim-cube")] pub use primitives::cube; #[cfg(feature = "prim-plane")] pub use primitives::plane; #[cfg(feature = "prim-sphere")] pub use primitives::{icosphere, uv_sphere}; #[cfg(feature = "prim-cylinder")] pub use primitives::cylinder; #[cfg(feature = "prim-cone")] pub use primitives::cone; #[cfg(feature = "prim-torus")] pub use primitives::torus; #[cfg(feature = "import-obj")] pub use import::load_obj; #[cfg(feature = "import-gltf")] pub use import::load_gltf;