Scratch Buffer wiederverwenden statt neu allokieren
This commit is contained in:
+8
-3
@@ -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> + '_ {
|
||||
|
||||
Reference in New Issue
Block a user