~starkingdoms/starkingdoms

27a53b0042cdb2a1a6c6e4d123ceb00455d77645 — ghostly_zsh 8 months ago d59a182
egui is faster and so is rendering
2 files changed, 34 insertions(+), 31 deletions(-)

M crates/client/src/lib.rs
M crates/client/src/rendering/mod.rs
M crates/client/src/lib.rs => crates/client/src/lib.rs +2 -1
@@ 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();
}

M crates/client/src/rendering/mod.rs => crates/client/src/rendering/mod.rs +32 -30
@@ 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()));
    }
}