From 770b64cb98c7e52d2ed3f75b817aaed5502461ab Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 18 Apr 2026 13:04:19 +0200 Subject: feat(engine): add UpdateMesh renderer command --- engine/src/renderer/opengl/graphics_mesh.rs | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'engine/src/renderer/opengl/graphics_mesh.rs') diff --git a/engine/src/renderer/opengl/graphics_mesh.rs b/engine/src/renderer/opengl/graphics_mesh.rs index 3cf9181..c5ff0c6 100644 --- a/engine/src/renderer/opengl/graphics_mesh.rs +++ b/engine/src/renderer/opengl/graphics_mesh.rs @@ -143,6 +143,48 @@ impl GraphicsMesh }) } + pub fn update( + &mut self, + current_context: &GlCurrentContextWithFns<'_>, + mesh: &Mesh, + mesh_usage: MeshUsage, + ) -> Result<(), Error> + { + let buffer_usage = mesh_usage_to_gl_buffer_usage(mesh_usage); + + self.vertex_buffer + .store(current_context, mesh.vertex_buf().as_bytes(), buffer_usage) + .map_err(Error::StoreVerticesFailed)?; + + if let Some(indices) = mesh.indices() { + let index_buffer = self + .index_buffer + .get_or_insert_with(|| GlBuffer::new(current_context)); + + index_buffer + .store(current_context, indices, buffer_usage) + .map_err(Error::StoreIndicesFailed)?; + + self.vertex_arr + .bind_element_buffer(current_context, &index_buffer); + + self.element_cnt = indices + .len() + .try_into() + .expect("Mesh index count does not fit into a 32-bit unsigned int"); + + return Ok(()); + } + + self.element_cnt = mesh + .vertex_buf() + .len() + .try_into() + .expect("Mesh vertex count does not fit into a 32-bit unsigned int"); + + Ok(()) + } + pub fn destroy(&mut self, curr_gl_ctx: &GlCurrentContextWithFns<'_>) { self.vertex_arr.delete(curr_gl_ctx); -- cgit v1.2.3-18-g5258