Scratch Buffer wiederverwenden statt neu allokieren

This commit is contained in:
2026-05-15 22:55:44 +02:00
parent acb815988c
commit da9f03b117
+8 -3
View File
@@ -97,6 +97,7 @@ pub struct Platform {
aspect_ratio: f32, // 0.0 = keine Letterbox
content_rect: (u32, u32, u32, u32),
event_queue: VecDeque<Event>,
event_scratch: Vec<glfw::WindowEvent>,
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<Item = Event> + '_ {