diff options
Diffstat (limited to 'engine/src/renderer/opengl.rs')
| -rw-r--r-- | engine/src/renderer/opengl.rs | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/engine/src/renderer/opengl.rs b/engine/src/renderer/opengl.rs index b434cd8..81cbdc2 100644 --- a/engine/src/renderer/opengl.rs +++ b/engine/src/renderer/opengl.rs @@ -93,6 +93,7 @@ use crate::renderer::{ Command as RendererCommand, CommandQueue as RendererCommandQueue, CtxUsedByWindow as RendererCtxUsedByWindow, + DrawMeshOptions, DrawPropertiesUpdateFlags, GraphicsProperties, PRE_RENDER_PHASE, @@ -1089,7 +1090,7 @@ fn handle_commands( tracing::error!("Failed to update mesh: {err}"); } } - RendererCommand::DrawMesh(mesh_object_id) => { + RendererCommand::DrawMesh(mesh_object_id, draw_mesh_opts) => { let Some(curr_gl_ctx) = &opt_curr_gl_ctx else { tracing::error!("No GL context is current"); continue; @@ -1145,7 +1146,9 @@ fn handle_commands( continue; } - if let Err(err) = draw_mesh(&curr_gl_ctx, graphics_mesh) { + if let Err(err) = + draw_mesh(&curr_gl_ctx, graphics_mesh, &draw_mesh_opts) + { tracing::error!("Failed to draw mesh: {err}"); }; } @@ -1330,6 +1333,7 @@ fn set_viewport( fn draw_mesh( current_context: &CurrentContextWithFns<'_>, graphics_mesh: &GraphicsMesh, + opts: &DrawMeshOptions, ) -> Result<(), GlDrawError> { graphics_mesh.vertex_arr.bind(current_context); @@ -1339,17 +1343,17 @@ fn draw_mesh( current_context, opengl_bindings::vertex_array::DrawElementsOptions { primitive_kind: PrimitiveKind::Triangles, - element_offset: 0, - element_cnt: graphics_mesh.element_cnt, - vertex_offset: 0, + element_offset: opts.element_offset, + element_cnt: opts.element_cnt.unwrap_or(graphics_mesh.element_cnt), + vertex_offset: opts.vertex_offset, }, )?; } else { VertexArray::draw_arrays( current_context, PrimitiveKind::Triangles, - 0, - graphics_mesh.element_cnt, + opts.vertex_offset, + opts.element_cnt.unwrap_or(graphics_mesh.element_cnt), )?; } |
