From 27a53b0042cdb2a1a6c6e4d123ceb00455d77645 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Fri, 21 Mar 2025 17:35:11 -0500 Subject: [PATCH] egui is faster and so is rendering --- crates/client/src/lib.rs | 3 +- crates/client/src/rendering/mod.rs | 62 +++++++++++++++--------------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/crates/client/src/lib.rs b/crates/client/src/lib.rs index 007c0c7cbcee464f7d7f67367e05ea623c10d307..bdc3cc01fb7dee029441c703258ce4f4c15b1b63 100644 --- a/crates/client/src/lib.rs +++ b/crates/client/src/lib.rs @@ -26,7 +26,8 @@ pub fn start() { info!("Creating the ECS world..."); let event_loop = EventLoop::new().unwrap(); - event_loop.set_control_flow(ControlFlow::Poll); + + event_loop.set_control_flow(ControlFlow::Wait); event_loop.run_app(&mut App::default()).unwrap(); } diff --git a/crates/client/src/rendering/mod.rs b/crates/client/src/rendering/mod.rs index 97ee2545f838c5802ac239c5d98c10f7187b5003..622ca3f5631a7f6b213d09e5026cfae8e762f6a5 100644 --- a/crates/client/src/rendering/mod.rs +++ b/crates/client/src/rendering/mod.rs @@ -13,6 +13,7 @@ use glutin_winit::{DisplayBuilder, GlWindow}; use wasm_bindgen::{prelude::Closure, JsCast}; #[cfg(target_arch = "wasm32")] use web_sys::{Event, HtmlCanvasElement}; +use winit::event_loop::ControlFlow; #[cfg(target_arch = "wasm32")] use winit::platform::web::{WindowAttributesExtWebSys, WindowExtWebSys}; use winit::{application::ApplicationHandler, dpi::LogicalSize, event::WindowEvent, event_loop::ActiveEventLoop, raw_window_handle::HasWindowHandle, window::{Window, WindowAttributes}}; @@ -210,40 +211,41 @@ impl ApplicationHandler for App { self.gl.as_ref().unwrap().viewport(0, 0, size.width as i32, size.height as i32); } } - WindowEvent::RedrawRequested => { - let window = self.window.as_ref().unwrap(); - let gl = self.gl.as_ref().unwrap(); - - self.egui_glow.as_mut().unwrap().run( - self.window.as_ref().unwrap(), - |ctx| { - egui::Window::new("Main Menu").resizable(false).show(ctx, |ui| { - ui.heading("Starkingdoms.tk"); - }); - }, - ); - unsafe { - gl.clear(glow::COLOR_BUFFER_BIT); - gl.use_program(self.program); - gl.active_texture(glow::TEXTURE0); - gl.bind_texture(glow::TEXTURE_2D, self.texture_object); - gl.bind_vertex_array(self.vertex_array); - gl.bind_buffer(glow::ARRAY_BUFFER, self.vertex_buffer); - gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, self.element_buffer); - gl.draw_elements(glow::TRIANGLES, 6, glow::UNSIGNED_INT, 0); - } - - self.egui_glow.as_mut().unwrap().paint(self.window.as_ref().unwrap()); - - #[cfg(not(target_arch = "wasm32"))] - self.gl_surface.as_ref().unwrap().swap_buffers(self.gl_context.as_ref().unwrap()).unwrap(); - - window.request_redraw(); - } _ => {} } let event_response = self.egui_glow.as_mut().unwrap() .on_window_event(self.window.as_ref().unwrap(), &event); } + fn about_to_wait(&mut self, event_loop: &ActiveEventLoop) { + let window = self.window.as_ref().unwrap(); + let gl = self.gl.as_ref().unwrap(); + + self.egui_glow.as_mut().unwrap().run( + self.window.as_ref().unwrap(), + |ctx| { + egui::Window::new("Main Menu").resizable(false).show(ctx, |ui| { + ui.heading("Starkingdoms.tk"); + }); + }, + ); + + unsafe { + gl.clear(glow::COLOR_BUFFER_BIT); + gl.use_program(self.program); + gl.active_texture(glow::TEXTURE0); + gl.bind_texture(glow::TEXTURE_2D, self.texture_object); + gl.bind_vertex_array(self.vertex_array); + gl.bind_buffer(glow::ARRAY_BUFFER, self.vertex_buffer); + gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, self.element_buffer); + gl.draw_elements(glow::TRIANGLES, 6, glow::UNSIGNED_INT, 0); + } + + self.egui_glow.as_mut().unwrap().paint(self.window.as_ref().unwrap()); + + #[cfg(not(target_arch = "wasm32"))] + self.gl_surface.as_ref().unwrap().swap_buffers(self.gl_context.as_ref().unwrap()).unwrap(); + + event_loop.set_control_flow(ControlFlow::WaitUntil(web_time::Instant::now().checked_add(web_time::Duration::from_millis(16)).unwrap())); + } }