diff options
author | HampusM <hampus@hampusmat.com> | 2023-10-13 22:34:23 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2023-10-13 22:34:23 +0200 |
commit | 25b5ca97c5e5597570360c37d7452662e0118a00 (patch) | |
tree | be724d8a454faf955b6cdc59203b94a4a6ddeee0 /engine/src/renderer/vertex_buffers.rs | |
parent | 4da06868266c12622207e2e61f92aee93c24aaf8 (diff) |
refactor(engine): make vertex buffer wrapper hold single buffer
Diffstat (limited to 'engine/src/renderer/vertex_buffers.rs')
-rw-r--r-- | engine/src/renderer/vertex_buffers.rs | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/engine/src/renderer/vertex_buffers.rs b/engine/src/renderer/vertex_buffers.rs deleted file mode 100644 index e7cba91..0000000 --- a/engine/src/renderer/vertex_buffers.rs +++ /dev/null @@ -1,87 +0,0 @@ -use std::mem::size_of_val; - -use crate::vertex::Vertex; - -#[derive(Debug)] -pub struct VertexBuffers<const CNT: usize> -{ - buffers: [gl::types::GLuint; CNT], -} - -impl<const CNT: usize> VertexBuffers<CNT> -{ - pub fn new() -> Self - { - let mut buffers = [gl::types::GLuint::default(); CNT]; - - unsafe { - #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] - gl::GenBuffers(CNT as gl::types::GLsizei, buffers.as_mut_ptr()); - }; - - Self { buffers } - } - - pub fn store( - &self, - buffer_index: usize, - vertices: &[Vertex], - usage: BufferUsage, - ) -> Option<()> - { - let buffer = *self.buffers.get(buffer_index)?; - - unsafe { - gl::BindBuffer(gl::ARRAY_BUFFER, buffer); - } - - unsafe { - #[allow(clippy::cast_possible_wrap)] - gl::BufferData( - gl::ARRAY_BUFFER, - size_of_val(vertices) as gl::types::GLsizeiptr, - vertices.as_ptr().cast(), - usage.into_gl(), - ); - } - - Some(()) - } -} - -impl<const CNT: usize> Drop for VertexBuffers<CNT> -{ - fn drop(&mut self) - { - #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] - unsafe { - gl::DeleteBuffers(CNT as gl::types::GLsizei, self.buffers.as_ptr()); - } - } -} - -#[derive(Debug)] -#[allow(dead_code)] -pub enum BufferUsage -{ - /// The buffer data is set only once and used by the GPU at most a few times. - Stream, - - /// The buffer data is set only once and used many times. - Static, - - /// The buffer data is changed a lot and used many times. - Dynamic, -} - -impl BufferUsage -{ - fn into_gl(self) -> gl::types::GLenum - { - match self { - Self::Stream => gl::STREAM_DRAW, - Self::Static => gl::STATIC_DRAW, - Self::Dynamic => gl::DYNAMIC_DRAW, - } - } -} |