@@ 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();
}
@@ 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()));
+ }
}