From da9f03b1170af5d356a4bf704db0fcfead7f48f9 Mon Sep 17 00:00:00 2001 From: irrlicht Date: Fri, 15 May 2026 22:55:44 +0200 Subject: [PATCH] Scratch Buffer wiederverwenden statt neu allokieren --- src/lib.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 991629f..7ebf16e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,6 +97,7 @@ pub struct Platform { aspect_ratio: f32, // 0.0 = keine Letterbox content_rect: (u32, u32, u32, u32), event_queue: VecDeque, + event_scratch: Vec, close_requested: bool, } @@ -207,6 +208,7 @@ impl Platform { framebuffer_size: (src_w, src_h), aspect_ratio, content_rect, event_queue: VecDeque::new(), + event_scratch: Vec::new(), close_requested: false, } } @@ -219,9 +221,12 @@ impl Platform { Some(t) => self.glfw.wait_events_timeout(t.as_secs_f64()), None => self.glfw.wait_events(), } - // flush_messages borrowt &events, handle_glfw_event will &mut self → erst sammeln. - let drained: Vec<_> = glfw::flush_messages(&self.events).map(|(_, ev)| ev).collect(); - for ev in drained { self.handle_glfw_event(ev); } + // flush_messages borrowt &events, handle_glfw_event will &mut self → in + // wiederverwendeten Scratch-Buffer umparken statt pro Frame allokieren. + let mut scratch = std::mem::take(&mut self.event_scratch); + scratch.extend(glfw::flush_messages(&self.events).map(|(_, ev)| ev)); + for ev in scratch.drain(..) { self.handle_glfw_event(ev); } + self.event_scratch = scratch; } pub fn drain_events(&mut self) -> impl Iterator + '_ {