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.
69 lines
2.1 KiB
Rust
69 lines
2.1 KiB
Rust
use winit::{
|
|
event::*,
|
|
event_loop::EventLoop,
|
|
keyboard::{KeyCode, PhysicalKey},
|
|
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::Debug).expect("Couldn't initialize logger");
|
|
} else {
|
|
env_logger::init();
|
|
}
|
|
}
|
|
|
|
let event_loop = EventLoop::new().unwrap();
|
|
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;
|
|
let _ = window.request_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::Resumed => {
|
|
log::debug!("Resumed");
|
|
}
|
|
Event::WindowEvent {
|
|
ref event,
|
|
window_id,
|
|
} if window_id == window.id() => match event {
|
|
WindowEvent::CloseRequested
|
|
| WindowEvent::KeyboardInput {
|
|
event:
|
|
KeyEvent {
|
|
state: ElementState::Pressed,
|
|
physical_key: PhysicalKey::Code(KeyCode::Escape),
|
|
..
|
|
},
|
|
..
|
|
} => control_flow.exit(),
|
|
_ => {}
|
|
},
|
|
_ => {}
|
|
})
|
|
.unwrap();
|
|
}
|