//! # Vertex Module //! //! Defines `Vertex`, the CPU-side data layout that is sent to the GPU as vertex attribute buffers. //! The struct's field order and offsets must exactly match the shader input attributes defined in //! PipelineCache::build_pipeline() — any mismatch will corrupt GPU rendering output. //! //! ## Technical Points //! - `#[repr(C)]` ensures fields are laid out contiguously without Rust padding reordering, matching C ABI. //! - `bytemuck::Pod + bytemuck::Zeroable` enables safe `cast_slice()` conversion for GPU buffer uploads. /// Per-vertex attribute tuple: position (3D), normal (3D), texture coordinate (2D), color (RGBA). /// Must match the vertex buffer layout in PipelineCache::build_pipeline() byte-for-byte. #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct Vertex { /// XYZ coordinates of this vertex in world space. Offset: 0 bytes. pub position: [f32; 3], /// XYZ coordinates of the vertex normal. Offset: 12 bytes. pub normal: [f32; 3], /// UV texture coordinates. Offset: 24 bytes pub uv: [f32; 2], /// RGBA color values. Offset: 32 bytes. pub color: [f32; 4], } // Default values for stability