From 6b2feeab0b845d05cdf76328d44b7b70a5e50c18 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 10 May 2025 13:10:46 +0200 Subject: refactor(engine): make GL renderer have it's own Vertex struct --- engine/src/opengl/buffer.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'engine/src/opengl/buffer.rs') diff --git a/engine/src/opengl/buffer.rs b/engine/src/opengl/buffer.rs index 2fabe4d..eded553 100644 --- a/engine/src/opengl/buffer.rs +++ b/engine/src/opengl/buffer.rs @@ -1,5 +1,6 @@ use std::marker::PhantomData; use std::mem::size_of_val; +use std::ptr::null; #[derive(Debug)] pub struct Buffer @@ -35,6 +36,37 @@ impl Buffer } } + pub fn store_mapped( + &mut self, + values: &[Value], + usage: Usage, + mut map_func: impl FnMut(&Value) -> Item, + ) + { + unsafe { + #[allow(clippy::cast_possible_wrap)] + gl::NamedBufferData( + self.buf, + (size_of::() * values.len()) as gl::types::GLsizeiptr, + null(), + usage.into_gl(), + ); + } + + for (index, value) in values.iter().enumerate() { + let item = map_func(value); + + unsafe { + gl::NamedBufferSubData( + self.buf, + (index * size_of::()) as gl::types::GLintptr, + size_of::() as gl::types::GLsizeiptr, + (&raw const item).cast(), + ); + } + } + } + pub fn object(&self) -> gl::types::GLuint { self.buf -- cgit v1.2.3-18-g5258