diff --git a/src/main.rs b/src/main.rs index 9a7cbf1..12b5dec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,7 +60,7 @@ fn offset(n: u32) -> *const c_void { // Get a null pointer (equivalent to an offset of 0) // ptr::null() -unsafe fn create_vao(vertices: &Vec, colors: &Vec, indices: &Vec) -> u32 { +unsafe fn create_vao(vertices: &Vec, normals: &Vec, colors: &Vec, indices: &Vec) -> u32 { let mut vao_id = 0; gl::GenVertexArrays(1, &mut vao_id); gl::BindVertexArray(vao_id); @@ -109,6 +109,19 @@ unsafe fn create_vao(vertices: &Vec, colors: &Vec, indices: &Vec) gl::VertexAttribPointer(1, 4, gl::FLOAT, gl::FALSE, 0, std::ptr::null()); gl::EnableVertexAttribArray(1); + // normal buffer + let mut nbo_id = 0; + gl::GenBuffers(1, &mut nbo_id); + gl::BindBuffer(gl::ARRAY_BUFFER, nbo_id); + gl::BufferData( + gl::ARRAY_BUFFER, + byte_size_of_array(&normals), + normals.as_ptr() as *const c_void, + gl::STATIC_DRAW, + ); + gl::VertexAttribPointer(2, DIMENSIONS, gl::FLOAT, gl::FALSE, 0, std::ptr::null()); + gl::EnableVertexAttribArray(2); + vao_id } @@ -184,7 +197,7 @@ fn main() { // == // Set up your VAO around here let terrain_mesh = mesh::Terrain::load("resources/lunarsurface.obj"); let terrain_vao = unsafe { - create_vao(&terrain_mesh.vertices, &terrain_mesh.colors, &terrain_mesh.indices) + create_vao(&terrain_mesh.vertices, &terrain_mesh.normals, &terrain_mesh.colors, &terrain_mesh.indices) }; let vertices = vec![ @@ -241,7 +254,7 @@ fn main() { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, ]; - let billboard_vao = unsafe { create_vao(&billboard_vertices, &billboard_colors, &billboard_indices) }; + let billboard_vao = unsafe { create_vao(&billboard_vertices, &Vec::new(), &billboard_colors, &billboard_indices) }; // Generate a grid of point‐particles let grid_size = 200; @@ -256,7 +269,7 @@ fn main() { particle_colors.extend_from_slice(&[1.0, 1.0, 1.0, 1.0]); } } - let particle_vao = unsafe { create_vao(&particle_vertices, &particle_colors, &Vec::new()) }; + let particle_vao = unsafe { create_vao(&particle_vertices, &Vec::new(), &particle_colors, &Vec::new()) }; let particle_count = (grid_size * grid_size) as i32; // == // Set up your shaders here