summaryrefslogtreecommitdiff
path: root/engine/src/renderer/opengl.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-04-18 21:23:15 +0200
committerHampusM <hampus@hampusmat.com>2026-04-18 21:24:45 +0200
commit6171fb6c9157593906bbc0fe5145405f10131123 (patch)
tree5d0b13c9ec6d1f5f0a110794a30d855c9508b33f /engine/src/renderer/opengl.rs
parent450670dbfb153f00adf431ad77379042a9114ab0 (diff)
feat(engine): add offset options to renderer::Command::DrawMesh
Diffstat (limited to 'engine/src/renderer/opengl.rs')
-rw-r--r--engine/src/renderer/opengl.rs18
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),
)?;
}