diff options
Diffstat (limited to 'engine/src/renderer')
| -rw-r--r-- | engine/src/renderer/mod.rs | 35 | ||||
| -rw-r--r-- | engine/src/renderer/vertex_array.rs | 51 | ||||
| -rw-r--r-- | engine/src/renderer/vertex_buffers.rs | 4 | 
3 files changed, 58 insertions, 32 deletions
diff --git a/engine/src/renderer/mod.rs b/engine/src/renderer/mod.rs index 13091fd..bbcb5e9 100644 --- a/engine/src/renderer/mod.rs +++ b/engine/src/renderer/mod.rs @@ -1,13 +1,12 @@ -use std::ffi::{c_float, c_void, CString}; -use std::mem::size_of; +use std::ffi::{c_void, CString};  use std::process::abort; -use std::ptr::null;  use glfw::WindowSize;  use crate::renderer::vertex_array::{PrimitiveKind, VertexArray};  use crate::renderer::vertex_buffers::{BufferUsage, VertexBuffers};  use crate::vector::Vec2; +use crate::vertex::Vertex;  mod vertex_array;  mod vertex_buffers; @@ -62,7 +61,7 @@ pub struct Renderable  impl Renderable  { -    pub fn new(shader_program: crate::shader::Program, vertices: &[f32]) -> Self +    pub fn new(shader_program: crate::shader::Program, vertices: &[Vertex]) -> Self      {          let vertex_arr = VertexArray::new(); @@ -74,8 +73,7 @@ impl Renderable              .store(0, vertices, BufferUsage::Static)              .unwrap(); -        vertex_attrib_ptr(0); -        enable_vertex_attrib_array(0); +        VertexArray::configure_attrs();          Self {              shader_program, @@ -105,28 +103,3 @@ pub enum Error      #[error("Failed to get window size")]      GetWindowSizeFailed(#[source] glfw::Error),  } - -fn vertex_attrib_ptr(index: usize) -{ -    let stride = 3 * size_of::<c_float>(); - -    unsafe { -        #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] -        gl::VertexAttribPointer( -            index as gl::types::GLuint, -            3, -            gl::FLOAT, -            gl::FALSE, -            stride as gl::types::GLsizei, -            null(), -        ); -    } -} - -fn enable_vertex_attrib_array(index: usize) -{ -    unsafe { -        #[allow(clippy::cast_possible_truncation)] -        gl::EnableVertexAttribArray(index as gl::types::GLuint); -    } -} diff --git a/engine/src/renderer/vertex_array.rs b/engine/src/renderer/vertex_array.rs index 5862c7b..b0aac81 100644 --- a/engine/src/renderer/vertex_array.rs +++ b/engine/src/renderer/vertex_array.rs @@ -1,3 +1,9 @@ +use std::mem::size_of; + +use crate::vertex::{Attribute, AttributeComponentType, Vertex}; + +const VERTEX_STRIDE: usize = size_of::<Vertex>(); +  #[derive(Debug)]  pub struct VertexArray  { @@ -31,10 +37,55 @@ impl VertexArray          }      } +    pub fn configure_attrs() +    { +        let mut offset = 0; + +        for attr in Vertex::attrs() { +            Self::vertex_attrib_ptr(attr, offset); + +            Self::enable_vertex_attrib_array(attr.index); + +            offset += attr.component_size * attr.component_cnt as usize; +        } +    } +      pub fn bind(&self)      {          unsafe { gl::BindVertexArray(self.array) }      } + +    fn vertex_attrib_ptr(vertex_attr: &Attribute, offset: usize) +    { +        unsafe { +            #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] +            gl::VertexAttribPointer( +                vertex_attr.index as gl::types::GLuint, +                vertex_attr.component_cnt as i32, +                Self::vertex_attr_type_to_gl(&vertex_attr.component_type), +                gl::FALSE, +                VERTEX_STRIDE as gl::types::GLsizei, +                offset as *const _, +            ); +        } +    } + +    fn enable_vertex_attrib_array(index: usize) +    { +        unsafe { +            #[allow(clippy::cast_possible_truncation)] +            gl::EnableVertexAttribArray(index as gl::types::GLuint); +        } +    } + +    fn vertex_attr_type_to_gl( +        vertex_attr_type: &AttributeComponentType, +    ) -> gl::types::GLenum +    { +        match vertex_attr_type { +            AttributeComponentType::Float => gl::FLOAT, +        } +    }  }  impl Drop for VertexArray diff --git a/engine/src/renderer/vertex_buffers.rs b/engine/src/renderer/vertex_buffers.rs index bb988d9..e7cba91 100644 --- a/engine/src/renderer/vertex_buffers.rs +++ b/engine/src/renderer/vertex_buffers.rs @@ -1,5 +1,7 @@  use std::mem::size_of_val; +use crate::vertex::Vertex; +  #[derive(Debug)]  pub struct VertexBuffers<const CNT: usize>  { @@ -23,7 +25,7 @@ impl<const CNT: usize> VertexBuffers<CNT>      pub fn store(          &self,          buffer_index: usize, -        vertices: &[f32], +        vertices: &[Vertex],          usage: BufferUsage,      ) -> Option<()>      {  | 
