mirror of https://github.com/sotrh/learn-wgpu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
Rust
63 lines
1.9 KiB
Rust
use winit::{
|
|
event::*,
|
|
event_loop::{ControlFlow, EventLoop},
|
|
window::WindowBuilder,
|
|
};
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
|
|
pub fn run() {
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(target_arch = "wasm32")] {
|
|
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
|
|
console_log::init_with_level(log::Level::Warn).expect("Couldn't initialize logger");
|
|
} else {
|
|
env_logger::init();
|
|
}
|
|
}
|
|
|
|
let event_loop = EventLoop::new();
|
|
let window = WindowBuilder::new().build(&event_loop).unwrap();
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
{
|
|
// Winit prevents sizing with CSS, so we have to set
|
|
// the size manually when on web.
|
|
use winit::dpi::PhysicalSize;
|
|
window.set_inner_size(PhysicalSize::new(450, 400));
|
|
|
|
use winit::platform::web::WindowExtWebSys;
|
|
web_sys::window()
|
|
.and_then(|win| win.document())
|
|
.and_then(|doc| {
|
|
let dst = doc.get_element_by_id("wasm-example")?;
|
|
let canvas = web_sys::Element::from(window.canvas());
|
|
dst.append_child(&canvas).ok()?;
|
|
Some(())
|
|
})
|
|
.expect("Couldn't append canvas to document body.");
|
|
}
|
|
|
|
event_loop.run(move |event, _, control_flow| match event {
|
|
Event::WindowEvent {
|
|
ref event,
|
|
window_id,
|
|
} if window_id == window.id() => match event {
|
|
WindowEvent::CloseRequested
|
|
| WindowEvent::KeyboardInput {
|
|
input:
|
|
KeyboardInput {
|
|
state: ElementState::Pressed,
|
|
virtual_keycode: Some(VirtualKeyCode::Escape),
|
|
..
|
|
},
|
|
..
|
|
} => *control_flow = ControlFlow::Exit,
|
|
_ => {}
|
|
},
|
|
_ => {}
|
|
});
|
|
}
|