From 450670dbfb153f00adf431ad77379042a9114ab0 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 18 Apr 2026 17:07:50 +0200 Subject: feat(engine): add scissor testing to renderer draw props --- engine/src/renderer/opengl.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'engine/src/renderer/opengl.rs') diff --git a/engine/src/renderer/opengl.rs b/engine/src/renderer/opengl.rs index df57b84..b434cd8 100644 --- a/engine/src/renderer/opengl.rs +++ b/engine/src/renderer/opengl.rs @@ -40,7 +40,9 @@ use opengl_bindings::misc::{ Capability, SetViewportError as GlSetViewportError, clear_buffers, + define_scissor_box as gl_define_scissor_box, enable, + get_viewport as gl_get_viewport, set_enabled, }; use opengl_bindings::shader::{ @@ -1203,6 +1205,43 @@ fn handle_commands( draw_props.depth_test_enabled, ); } + + if draw_props_update_flags + .contains(DrawPropertiesUpdateFlags::SCISSOR_TEST_ENABLED) + { + set_enabled( + curr_gl_ctx, + Capability::ScissorTest, + draw_props.scissor_test_enabled, + ); + } + + if draw_props_update_flags + .contains(DrawPropertiesUpdateFlags::SCISSOR_BOX) + { + gl_define_scissor_box( + curr_gl_ctx, + draw_props.scissor_box.lower_left_corner_pos.into(), + draw_props + .scissor_box + .size + .unwrap_or_else(|| { + let (_, viewport_size) = gl_get_viewport(curr_gl_ctx); + + Dimens:: { + width: viewport_size + .width + .try_into() + .expect("Viewport width too large"), + height: viewport_size + .height + .try_into() + .expect("Viewport height too large"), + } + }) + .into(), + ); + } } } } -- cgit v1.2.3-18-g5258