pub mod saddle;
pub mod sphere;
pub mod torus;
use glam::Vec3;
pub trait Surface: Send + Sync {
fn position(&self, u: f32, v: f32) -> Vec3;
fn metric(&self, u: f32, v: f32) -> [[f32; 2]; 2];
fn christoffel(&self, u: f32, v: f32) -> [[[f32; 2]; 2]; 2];
fn wrap(&self, u: f32, v: f32) -> (f32, f32);
fn normal(&self, u: f32, v: f32) -> Vec3;
fn random_position(&self, rng: &mut dyn rand::RngCore) -> (f32, f32);
fn random_tangent(&self, u: f32, v: f32, rng: &mut dyn rand::RngCore) -> (f32, f32);
fn mesh_vertices(&self, u_steps: u32, v_steps: u32) -> (Vec<[f32; 3]>, Vec<u32>);
}