migrated tutorials 1 and 2

0.19
Benjamin Hansen 4 months ago
parent 2bb2f8373b
commit 3f0caa6904

1584
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -16,5 +16,5 @@ members = [
] ]
exclude = [ exclude = [
"code/showcase/imgui-demo", "code/showcase/imgui-demo",
#"code/showcase/pong", "code/showcase/pong",
] ]

@ -13,17 +13,17 @@ path = "src/main.rs"
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
pollster = "0.3" pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "=0.2.87" wasm-bindgen = "=0.2.90"
wasm-bindgen-futures = "0.4.30" wasm-bindgen-futures = "0.4.30"
web-sys = { version = "0.3.53", features = [ web-sys = { version = "0.3.53", features = [
"Document", "Document",

@ -1,7 +1,7 @@
use winit::{ use winit::{
event::*, event::*,
event_loop::{ControlFlow, EventLoop}, event_loop::EventLoop,
window::WindowBuilder, window::WindowBuilder, keyboard::{KeyCode, PhysicalKey},
}; };
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
@ -18,7 +18,7 @@ pub fn run() {
} }
} }
let event_loop = EventLoop::new(); let event_loop = EventLoop::new().unwrap();
let window = WindowBuilder::new().build(&event_loop).unwrap(); let window = WindowBuilder::new().build(&event_loop).unwrap();
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
@ -40,23 +40,23 @@ pub fn run() {
.expect("Couldn't append canvas to document body."); .expect("Couldn't append canvas to document body.");
} }
event_loop.run(move |event, _, control_flow| match event { event_loop.run(move |event, control_flow| match event {
Event::WindowEvent { Event::WindowEvent {
ref event, ref event,
window_id, window_id,
} if window_id == window.id() => match event { } if window_id == window.id() => match event {
WindowEvent::CloseRequested WindowEvent::CloseRequested
| WindowEvent::KeyboardInput { | WindowEvent::KeyboardInput {
input: event:
KeyboardInput { KeyEvent {
state: ElementState::Pressed, state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape), physical_key: PhysicalKey::Code(KeyCode::Escape),
.. ..
}, },
.. ..
} => *control_flow = ControlFlow::Exit, } => control_flow.exit(),
_ => {} _ => {}
}, },
_ => {} _ => {}
}); }).unwrap();
} }

@ -9,16 +9,16 @@ crate-type = ["cdylib", "rlib"]
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
pollster = "0.3" pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -2,26 +2,27 @@ use std::iter;
use winit::{ use winit::{
event::*, event::*,
event_loop::{ControlFlow, EventLoop}, event_loop::EventLoop,
keyboard::{KeyCode, PhysicalKey},
window::{Window, WindowBuilder}, window::{Window, WindowBuilder},
}; };
struct State { struct State<'a> {
#[allow(dead_code)] #[allow(dead_code)]
instance: wgpu::Instance, instance: wgpu::Instance,
#[allow(dead_code)] #[allow(dead_code)]
adapter: wgpu::Adapter, adapter: wgpu::Adapter,
surface: wgpu::Surface, surface: wgpu::Surface<'a>,
device: wgpu::Device, device: wgpu::Device,
queue: wgpu::Queue, queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration, config: wgpu::SurfaceConfiguration,
size: winit::dpi::PhysicalSize<u32>, size: winit::dpi::PhysicalSize<u32>,
clear_color: wgpu::Color, clear_color: wgpu::Color,
window: Window, window: &'a Window,
} }
impl State { impl<'a> State<'a> {
async fn new(window: Window) -> Self { async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size(); let size = window.inner_size();
// The instance is a handle to our GPU // The instance is a handle to our GPU
@ -35,7 +36,7 @@ impl State {
// //
// The surface needs to live as long as the window that created it. // The surface needs to live as long as the window that created it.
// State owns the window so this should be safe. // State owns the window so this should be safe.
let surface = unsafe { instance.create_surface(&window) }.unwrap(); let surface = instance.create_surface(window).unwrap();
let adapter = instance let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions { .request_adapter(&wgpu::RequestAdapterOptions {
@ -50,10 +51,10 @@ impl State {
.request_device( .request_device(
&wgpu::DeviceDescriptor { &wgpu::DeviceDescriptor {
label: None, label: None,
features: wgpu::Features::empty(), required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if // WebGL doesn't support all of wgpu's features, so if
// we're building for the web we'll have to disable some. // we're building for the web we'll have to disable some.
limits: if cfg!(target_arch = "wasm32") { required_limits: if cfg!(target_arch = "wasm32") {
wgpu::Limits::downlevel_webgl2_defaults() wgpu::Limits::downlevel_webgl2_defaults()
} else { } else {
wgpu::Limits::default() wgpu::Limits::default()
@ -81,6 +82,7 @@ impl State {
height: size.height, height: size.height,
present_mode: surface_caps.present_modes[0], present_mode: surface_caps.present_modes[0],
alpha_mode: surface_caps.alpha_modes[0], alpha_mode: surface_caps.alpha_modes[0],
desired_maximum_frame_latency: 2,
view_formats: vec![], view_formats: vec![],
}; };
surface.configure(&device, &config); surface.configure(&device, &config);
@ -172,13 +174,13 @@ fn main() {
async fn run() { async fn run() {
env_logger::init(); env_logger::init();
let event_loop = EventLoop::new(); let event_loop = EventLoop::new().unwrap();
let window = WindowBuilder::new().build(&event_loop).unwrap(); let window = WindowBuilder::new().build(&event_loop).unwrap();
// State::new uses async code, so we're going to wait for it to finish // State::new uses async code, so we're going to wait for it to finish
let mut state = State::new(window).await; let mut state = State::new(&window).await;
event_loop.run(move |event, _, control_flow| { event_loop.run(move |event, control_flow| {
match event { match event {
Event::WindowEvent { Event::WindowEvent {
ref event, ref event,
@ -188,43 +190,40 @@ async fn run() {
match event { match event {
WindowEvent::CloseRequested WindowEvent::CloseRequested
| WindowEvent::KeyboardInput { | WindowEvent::KeyboardInput {
input: event:
KeyboardInput { KeyEvent {
state: ElementState::Pressed, state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape), physical_key: PhysicalKey::Code(KeyCode::Escape),
.. ..
}, },
.. ..
} => *control_flow = ControlFlow::Exit, } => control_flow.exit(),
WindowEvent::Resized(physical_size) => { WindowEvent::Resized(physical_size) => {
state.resize(*physical_size); state.resize(*physical_size);
} }
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => { WindowEvent::RedrawRequested => {
// new_inner_size is &mut so w have to dereference it twice state.window().request_redraw();
state.resize(**new_inner_size); state.update();
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => {
state.resize(state.size)
}
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => {
log::error!("OutOfMemory");
control_flow.exit();
}
// We're ignoring timeouts
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
} }
_ => {} _ => {}
} }
} }
} }
Event::RedrawRequested(window_id) if window_id == state.window().id() => {
state.update();
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => {
state.resize(state.size)
}
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit,
// We're ignoring timeouts
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
}
Event::MainEventsCleared => {
state.window().request_redraw();
}
_ => {} _ => {}
} }
}); }).unwrap();
} }

@ -2,15 +2,15 @@ use std::iter;
use winit::{ use winit::{
event::*, event::*,
event_loop::{ControlFlow, EventLoop}, event_loop::EventLoop,
window::{Window, WindowBuilder}, window::{Window, WindowBuilder}, keyboard::{PhysicalKey, KeyCode},
}; };
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
struct State { struct State<'a> {
surface: wgpu::Surface, surface: wgpu::Surface<'a>,
device: wgpu::Device, device: wgpu::Device,
queue: wgpu::Queue, queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration, config: wgpu::SurfaceConfiguration,
@ -18,11 +18,11 @@ struct State {
// The window must be declared after the surface so // The window must be declared after the surface so
// it gets dropped after it as the surface contains // it gets dropped after it as the surface contains
// unsafe references to the window's resources. // unsafe references to the window's resources.
window: Window, window: &'a Window,
} }
impl State { impl<'a> State<'a> {
async fn new(window: Window) -> Self { async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size(); let size = window.inner_size();
// The instance is a handle to our GPU // The instance is a handle to our GPU
@ -32,11 +32,7 @@ impl State {
..Default::default() ..Default::default()
}); });
// # Safety let surface = instance.create_surface(window).unwrap();
//
// The surface needs to live as long as the window that created it.
// State owns the window so this should be safe.
let surface = unsafe { instance.create_surface(&window) }.unwrap();
let adapter = instance let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions { .request_adapter(&wgpu::RequestAdapterOptions {
@ -51,10 +47,10 @@ impl State {
.request_device( .request_device(
&wgpu::DeviceDescriptor { &wgpu::DeviceDescriptor {
label: None, label: None,
features: wgpu::Features::empty(), required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if // WebGL doesn't support all of wgpu's features, so if
// we're building for the web we'll have to disable some. // we're building for the web we'll have to disable some.
limits: if cfg!(target_arch = "wasm32") { required_limits: if cfg!(target_arch = "wasm32") {
wgpu::Limits::downlevel_webgl2_defaults() wgpu::Limits::downlevel_webgl2_defaults()
} else { } else {
wgpu::Limits::default() wgpu::Limits::default()
@ -83,6 +79,7 @@ impl State {
height: size.height, height: size.height,
present_mode: surface_caps.present_modes[0], present_mode: surface_caps.present_modes[0],
alpha_mode: surface_caps.alpha_modes[0], alpha_mode: surface_caps.alpha_modes[0],
desired_maximum_frame_latency: 2,
view_formats: vec![], view_formats: vec![],
}; };
surface.configure(&device, &config); surface.configure(&device, &config);
@ -169,7 +166,7 @@ pub async fn run() {
} }
} }
let event_loop = EventLoop::new(); let event_loop = EventLoop::new().unwrap();
let window = WindowBuilder::new().build(&event_loop).unwrap(); let window = WindowBuilder::new().build(&event_loop).unwrap();
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
@ -192,9 +189,9 @@ pub async fn run() {
} }
// State::new uses async code, so we're going to wait for it to finish // State::new uses async code, so we're going to wait for it to finish
let mut state = State::new(window).await; let mut state = State::new(&window).await;
event_loop.run(move |event, _, control_flow| { event_loop.run(move |event, control_flow| {
match event { match event {
Event::WindowEvent { Event::WindowEvent {
ref event, ref event,
@ -205,45 +202,42 @@ pub async fn run() {
match event { match event {
WindowEvent::CloseRequested WindowEvent::CloseRequested
| WindowEvent::KeyboardInput { | WindowEvent::KeyboardInput {
input: event:
KeyboardInput { KeyEvent {
state: ElementState::Pressed, state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape), physical_key: PhysicalKey::Code(KeyCode::Escape),
.. ..
}, },
.. ..
} => *control_flow = ControlFlow::Exit, } => control_flow.exit(),
WindowEvent::Resized(physical_size) => { WindowEvent::Resized(physical_size) => {
state.resize(*physical_size); state.resize(*physical_size);
} }
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => { WindowEvent::RedrawRequested => {
// new_inner_size is &&mut so w have to dereference it twice // This tells winit that we want another frame after this one
state.resize(**new_inner_size); state.window().request_redraw();
state.update();
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => {
state.resize(state.size)
}
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => {
log::error!("OutOfMemory");
control_flow.exit();
}
// This happens when the a frame takes too long to present
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
} }
_ => {} _ => {}
} }
} }
} }
Event::RedrawRequested(window_id) if window_id == state.window().id() => {
state.update();
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => {
state.resize(state.size)
}
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit,
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
}
Event::RedrawEventsCleared => {
// RedrawRequested will only trigger once, unless we manually
// request it.
state.window().request_redraw();
}
_ => {} _ => {}
} }
}); }).unwrap();
} }

@ -9,16 +9,16 @@ crate-type = ["cdylib", "rlib"]
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
pollster = "0.3" pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -10,8 +10,8 @@ crate-type = ["cdylib", "rlib"]
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
wgpu = "0.18" wgpu = "0.19"
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
pollster = "0.3" pollster = "0.3"
@ -21,7 +21,7 @@ bytemuck = { version = "1.12", features = [ "derive" ] }
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -14,8 +14,8 @@ bytemuck = { version = "1.12", features = [ "derive" ] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
pollster = "0.3" pollster = "0.3"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -25,7 +25,7 @@ features = ["png", "jpeg"]
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -15,8 +15,8 @@ cgmath = "0.18"
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
pollster = "0.3" pollster = "0.3"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -26,7 +26,7 @@ features = ["png", "jpeg"]
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -15,8 +15,8 @@ cgmath = "0.18"
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
pollster = "0.3" pollster = "0.3"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -26,7 +26,7 @@ features = ["png", "jpeg"]
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -15,8 +15,8 @@ cgmath = "0.18"
env_logger = "0.10" env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -26,7 +26,7 @@ features = ["png", "jpeg"]
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -28,7 +28,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -28,7 +28,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[dependencies.image] [dependencies.image]
version = "0.24" version = "0.24"
@ -28,7 +28,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
instant = "0.1" instant = "0.1"
[dependencies.image] [dependencies.image]
@ -29,7 +29,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
instant = "0.1" instant = "0.1"
[dependencies.image] [dependencies.image]

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
instant = "0.1" instant = "0.1"
[dependencies.image] [dependencies.image]
@ -29,7 +29,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -14,8 +14,8 @@ image = "0.24"
log = "0.4" log = "0.4"
rayon = "1.4" rayon = "1.4"
tobj = "2.0" tobj = "2.0"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[build-dependencies] [build-dependencies]
anyhow = "1.0" anyhow = "1.0"

@ -14,9 +14,9 @@ pollster = "0.3"
image = "0.24.2" image = "0.24.2"
log = "0.4" log = "0.4"
tobj = "2.0" tobj = "2.0"
wgpu = "0.18" wgpu = "0.19"
wgpu-subscriber = "0.1" wgpu-subscriber = "0.1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
[build-dependencies] [build-dependencies]
anyhow = "1.0" anyhow = "1.0"

@ -14,8 +14,8 @@ pollster = "0.3"
image = "0.24.2" image = "0.24.2"
log = "0.4" log = "0.4"
tobj = "3.1" tobj = "3.1"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
gif = "0.11.4" gif = "0.11.4"
futures-intrusive = "0.4" futures-intrusive = "0.4"

@ -8,9 +8,9 @@ edition = "2018"
[dependencies] [dependencies]
anyhow = "1.0" anyhow = "1.0"
wgpu = "0.18" wgpu = "0.19"
pollster = "0.3" pollster = "0.3"
imgui = "0.7" imgui = "0.7"
imgui-wgpu = "0.18" imgui-wgpu = "0.19"
imgui-winit-support = "0.7" imgui-winit-support = "0.7"
framework = { path = "../framework" } framework = { path = "../framework" }

@ -7,6 +7,6 @@ edition = "2021"
[dependencies] [dependencies]
anyhow = "1" anyhow = "1"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
pollster = "0.3" pollster = "0.3"

@ -16,8 +16,8 @@ env_logger = "0.10"
pollster = "0.3" pollster = "0.3"
log = "0.4" log = "0.4"
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
instant = "0.1" instant = "0.1"
[dependencies.image] [dependencies.image]
@ -29,7 +29,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -10,12 +10,12 @@ crate-type = ["cdylib", "rlib"]
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
env_logger = "0.10" env_logger = "0.10"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
anyhow = "1.0" anyhow = "1.0"
bytemuck = { version = "1.12", features = [ "derive" ] } bytemuck = { version = "1.12", features = [ "derive" ] }
cgmath = "0.18" cgmath = "0.18"
pollster = "0.3" pollster = "0.3"
wgpu = { version = "0.18", features = ["spirv"]} wgpu = { version = "0.19", features = ["spirv"]}
wgpu_glyph = { version = "0.21", git = "https://github.com/hecrj/wgpu_glyph.git" } wgpu_glyph = { version = "0.21", git = "https://github.com/hecrj/wgpu_glyph.git" }
rand = "0.8" rand = "0.8"
rodio = { version = "0.16", default-features = false, features = ["wav"] } rodio = { version = "0.16", default-features = false, features = ["wav"] }
@ -28,13 +28,13 @@ console_log = "1.0"
getrandom = { version = "0.2", features = ["js"] } getrandom = { version = "0.2", features = ["js"] }
rodio = { version = "0.16", default-features = false, features = ["wasm-bindgen", "wav"] } rodio = { version = "0.16", default-features = false, features = ["wasm-bindgen", "wav"] }
wasm-bindgen-futures = "0.4.20" wasm-bindgen-futures = "0.4.20"
wasm-bindgen = "=0.2.87" wasm-bindgen = "=0.2.90"
web-sys = { version = "0.3.53", features = [ web-sys = { version = "0.3.53", features = [
"Document", "Document",
"Window", "Window",
"Element", "Element",
]} ]}
wgpu = { version = "0.18", features = ["spirv", "webgl"]} wgpu = { version = "0.19", features = ["spirv", "webgl"]}
[build-dependencies] [build-dependencies]
anyhow = "1.0" anyhow = "1.0"

@ -11,5 +11,5 @@ bytemuck = { version = "1.13.1", features = ["derive"] }
framework = { version = "0.1", path = "../framework"} framework = { version = "0.1", path = "../framework"}
glam = { version = "0.24.1", features = ["bytemuck"] } glam = { version = "0.24.1", features = ["bytemuck"] }
pollster = "0.3.0" pollster = "0.3.0"
wgpu = "0.18" wgpu = "0.19"
winit = "0.28.6" winit = "0.28.6"

@ -17,8 +17,8 @@ pollster = "0.3"
log = "0.4" log = "0.4"
rayon = "1.4" # NEW! rayon = "1.4" # NEW!
tobj = { version = "3.2", features = ["async"]} tobj = { version = "3.2", features = ["async"]}
wgpu = { version = "0.18"} wgpu = { version = "0.19"}
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
instant = "0.1" instant = "0.1"
async-std = "1" async-std = "1"
@ -31,7 +31,7 @@ features = ["png", "jpeg"]
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -1,4 +1,5 @@
use cgmath::*; use cgmath::*;
use winit::keyboard::KeyCode;
use std::f32::consts::FRAC_PI_2; use std::f32::consts::FRAC_PI_2;
use std::time::Duration; use std::time::Duration;
use winit::dpi::PhysicalPosition; use winit::dpi::PhysicalPosition;
@ -104,34 +105,34 @@ impl CameraController {
} }
} }
pub fn process_keyboard(&mut self, key: VirtualKeyCode, state: ElementState) -> bool { pub fn process_keyboard(&mut self, key: KeyCode, state: ElementState) -> bool {
let amount = if state == ElementState::Pressed { let amount = if state == ElementState::Pressed {
1.0 1.0
} else { } else {
0.0 0.0
}; };
match key { match key {
VirtualKeyCode::W | VirtualKeyCode::Up => { KeyCode::KeyW | KeyCode::ArrowUp => {
self.amount_forward = amount; self.amount_forward = amount;
true true
} }
VirtualKeyCode::S | VirtualKeyCode::Down => { KeyCode::KeyS | KeyCode::ArrowDown => {
self.amount_backward = amount; self.amount_backward = amount;
true true
} }
VirtualKeyCode::A | VirtualKeyCode::Left => { KeyCode::KeyA | KeyCode::ArrowLeft => {
self.amount_left = amount; self.amount_left = amount;
true true
} }
VirtualKeyCode::D | VirtualKeyCode::Right => { KeyCode::KeyD | KeyCode::ArrowRight => {
self.amount_right = amount; self.amount_right = amount;
true true
} }
VirtualKeyCode::Space => { KeyCode::Space => {
self.amount_up = amount; self.amount_up = amount;
true true
} }
VirtualKeyCode::LShift => { KeyCode::ShiftLeft => {
self.amount_down = amount; self.amount_down = amount;
true true
} }

@ -4,7 +4,8 @@ use std::iter;
use wgpu::util::DeviceExt; use wgpu::util::DeviceExt;
use winit::{ use winit::{
event::*, event::*,
event_loop::{ControlFlow, EventLoop}, event_loop::EventLoop,
keyboard::{KeyCode, PhysicalKey},
window::Window, window::Window,
}; };
@ -130,9 +131,9 @@ struct LightUniform {
_padding2: u32, _padding2: u32,
} }
struct State { struct State<'a> {
window: Window, window: &'a Window,
surface: wgpu::Surface, surface: wgpu::Surface<'a>,
device: wgpu::Device, device: wgpu::Device,
queue: wgpu::Queue, queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration, config: wgpu::SurfaceConfiguration,
@ -218,8 +219,8 @@ fn create_render_pipeline(
}) })
} }
impl State { impl<'a> State<'a> {
async fn new(window: Window) -> Self { async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size(); let size = window.inner_size();
// The instance is a handle to our GPU // The instance is a handle to our GPU
@ -229,15 +230,11 @@ impl State {
..Default::default() ..Default::default()
}); });
// # Safety let surface = instance.create_surface(window).unwrap();
//
// The surface needs to live as long as the window that created it.
// State owns the window so this should be safe.
let surface = unsafe { instance.create_surface(&window) }.unwrap();
let adapter = instance let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions { .request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::default(), power_preference: wgpu::PowerPreference::HighPerformance,
compatible_surface: Some(&surface), compatible_surface: Some(&surface),
force_fallback_adapter: false, force_fallback_adapter: false,
}) })
@ -247,10 +244,10 @@ impl State {
.request_device( .request_device(
&wgpu::DeviceDescriptor { &wgpu::DeviceDescriptor {
label: None, label: None,
features: wgpu::Features::empty(), required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if // WebGL doesn't support all of wgpu's features, so if
// we're building for the web we'll have to disable some. // we're building for the web we'll have to disable some.
limits: if cfg!(target_arch = "wasm32") { required_limits: if cfg!(target_arch = "wasm32") {
wgpu::Limits::downlevel_webgl2_defaults() wgpu::Limits::downlevel_webgl2_defaults()
} else { } else {
wgpu::Limits::default() wgpu::Limits::default()
@ -278,6 +275,7 @@ impl State {
height: size.height, height: size.height,
present_mode: surface_caps.present_modes[0], present_mode: surface_caps.present_modes[0],
alpha_mode: surface_caps.alpha_modes[0], alpha_mode: surface_caps.alpha_modes[0],
desired_maximum_frame_latency: 2, // The max number of frames that can be in the queue
view_formats: vec![], view_formats: vec![],
}; };
@ -573,9 +571,9 @@ impl State {
fn input(&mut self, event: &WindowEvent) -> bool { fn input(&mut self, event: &WindowEvent) -> bool {
match event { match event {
WindowEvent::KeyboardInput { WindowEvent::KeyboardInput {
input: event:
KeyboardInput { KeyEvent {
virtual_keycode: Some(key), physical_key: PhysicalKey::Code(key),
state, state,
.. ..
}, },
@ -694,7 +692,7 @@ pub async fn run() {
} }
} }
let event_loop = EventLoop::new(); let event_loop = EventLoop::new().unwrap();
let title = env!("CARGO_PKG_NAME"); let title = env!("CARGO_PKG_NAME");
let window = winit::window::WindowBuilder::new() let window = winit::window::WindowBuilder::new()
.with_title(title) .with_title(title)
@ -720,20 +718,19 @@ pub async fn run() {
.expect("Couldn't append canvas to document body."); .expect("Couldn't append canvas to document body.");
} }
let mut state = State::new(window).await; // NEW! let mut state = State::new(&window).await; // NEW!
let mut last_render_time = instant::Instant::now(); let mut last_render_time = instant::Instant::now();
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Poll; // let window = &window;
event_loop.run(move |event, control_flow| {
// let _ = window;
match event { match event {
Event::MainEventsCleared => state.window().request_redraw(),
// NEW!
Event::DeviceEvent { Event::DeviceEvent {
event: DeviceEvent::MouseMotion{ delta, }, event: DeviceEvent::MouseMotion{ delta, },
.. // We're not using device_id currently .. // We're not using device_id currently
} => if state.mouse_pressed { } => if state.mouse_pressed {
state.camera_controller.process_mouse(delta.0, delta.1) state.camera_controller.process_mouse(delta.0, delta.1)
} }
// UPDATED!
Event::WindowEvent { Event::WindowEvent {
ref event, ref event,
window_id, window_id,
@ -742,39 +739,37 @@ pub async fn run() {
#[cfg(not(target_arch="wasm32"))] #[cfg(not(target_arch="wasm32"))]
WindowEvent::CloseRequested WindowEvent::CloseRequested
| WindowEvent::KeyboardInput { | WindowEvent::KeyboardInput {
input: event:
KeyboardInput { KeyEvent {
state: ElementState::Pressed, state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape), physical_key: PhysicalKey::Code(KeyCode::Escape),
.. ..
}, },
.. ..
} => *control_flow = ControlFlow::Exit, } => control_flow.exit(),
WindowEvent::Resized(physical_size) => { WindowEvent::Resized(physical_size) => {
state.resize(*physical_size); state.resize(*physical_size);
} }
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => { WindowEvent::RedrawRequested => {
state.resize(**new_inner_size); state.window().request_redraw();
let now = instant::Instant::now();
let dt = now - last_render_time;
last_render_time = now;
state.update(dt);
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => state.resize(state.size),
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => control_flow.exit(),
// We're ignoring timeouts
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
} }
_ => {} _ => {}
} }
} }
Event::RedrawRequested(window_id) if window_id == state.window().id() => {
let now = instant::Instant::now();
let dt = now - last_render_time;
last_render_time = now;
state.update(dt);
match state.render() {
Ok(_) => {}
// Reconfigure the surface if it's lost or outdated
Err(wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated) => state.resize(state.size),
// The system is out of memory, we should probably quit
Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit,
// We're ignoring timeouts
Err(wgpu::SurfaceError::Timeout) => log::warn!("Surface timeout"),
}
}
_ => {} _ => {}
} }
}); }).unwrap();
} }

@ -189,7 +189,7 @@ pub async fn load_model(
// Average the tangents/bitangents // Average the tangents/bitangents
for (i, n) in triangles_included.into_iter().enumerate() { for (i, n) in triangles_included.into_iter().enumerate() {
let denom = 1.0 / n as f32; let denom = 1.0 / n as f32;
let mut v = &mut vertices[i]; let v = &mut vertices[i];
v.tangent = (cgmath::Vector3::from(v.tangent) * denom).into(); v.tangent = (cgmath::Vector3::from(v.tangent) * denom).into();
v.bitangent = (cgmath::Vector3::from(v.bitangent) * denom).into(); v.bitangent = (cgmath::Vector3::from(v.bitangent) * denom).into();
} }

@ -1,6 +1,5 @@
use anyhow::*; use anyhow::*;
use image::GenericImageView; use image::GenericImageView;
use std::num::NonZeroU32;
pub struct Texture { pub struct Texture {
pub texture: wgpu::Texture, pub texture: wgpu::Texture,

@ -9,7 +9,7 @@ edition = "2018"
[dependencies] [dependencies]
image = "0.24" image = "0.24"
shaderc = "0.8" shaderc = "0.8"
wgpu = { version = "0.18", features = ["spirv"] } wgpu = { version = "0.19", features = ["spirv"] }
pollster = "0.3" pollster = "0.3"
futures-intrusive = "0.4" futures-intrusive = "0.4"

@ -8,10 +8,10 @@ For the beginner stuff, we're going to keep things very simple. We'll add things
```toml ```toml
[dependencies] [dependencies]
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
``` ```
## Using Rust's new resolver ## Using Rust's new resolver
@ -110,7 +110,7 @@ cfg-if = "1"
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4.30" wasm-bindgen-futures = "0.4.30"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -286,16 +286,16 @@ If we try to build WASM now, it will fail because `wasm-bindgen` doesn't support
```toml ```toml
[dependencies] [dependencies]
cfg-if = "1" cfg-if = "1"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
wgpu = "0.18" wgpu = "0.19"
pollster = "0.3" pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
console_log = "1.0" console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -446,11 +446,11 @@ For convenience, let's pull our texture code into its own module. We'll first ne
[dependencies] [dependencies]
image = "0.23" image = "0.23"
cgmath = "0.18" cgmath = "0.18"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10" env_logger = "0.10"
log = "0.4" log = "0.4"
pollster = "0.3" pollster = "0.3"
wgpu = "0.18" wgpu = "0.19"
bytemuck = { version = "1.12", features = [ "derive" ] } bytemuck = { version = "1.12", features = [ "derive" ] }
anyhow = "1.0" # NEW! anyhow = "1.0" # NEW!
``` ```

@ -492,7 +492,7 @@ You may have noted that we have switched from `downlevel_webgl2_defaults()` to `
Consequently, we are going to remove the WebGL feature from `Cargo.toml`. This line in particular: Consequently, we are going to remove the WebGL feature from `Cargo.toml`. This line in particular:
```toml ```toml
wgpu = { version = "0.18", features = ["webgl"]} wgpu = { version = "0.19", features = ["webgl"]}
``` ```
</div> </div>

@ -29,7 +29,7 @@ In other news WebGPU has been added to Chrome 113 and up! Currently the Linux ve
reqwest = { version = "0.11" } reqwest = { version = "0.11" }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
console_log = "1.0" console_log = "1.0"
# wgpu = { version = "0.18", features = ["webgl"]} # wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [ web-sys = { version = "0.3", features = [

@ -14,7 +14,7 @@ This is not an in-depth guide on how to use Imgui. But here are some of the basi
```toml ```toml
imgui = "0.7" imgui = "0.7"
imgui-wgpu = "0.18" imgui-wgpu = "0.19"
imgui-winit-support = "0.7" imgui-winit-support = "0.7"
``` ```

@ -263,13 +263,13 @@ In order for wasm-pack to work properly I first needed to add some dependencies:
```toml[dependencies] ```toml[dependencies]
cfg-if = "1" cfg-if = "1"
env_logger = "0.10" env_logger = "0.10"
winit = "0.28" winit = { version = "0.29", features = ["rwh_05"] }
anyhow = "1.0" anyhow = "1.0"
bytemuck = { version = "1.12", features = [ "derive" ] } bytemuck = { version = "1.12", features = [ "derive" ] }
cgmath = "0.18" cgmath = "0.18"
pollster = "0.3" pollster = "0.3"
wgpu = { version = "0.18", features = ["spirv"]} wgpu = { version = "0.19", features = ["spirv"]}
wgpu_glyph = "0.18" wgpu_glyph = "0.19"
rand = "0.8" rand = "0.8"
rodio = { version = "0.15", default-features = false, features = ["wav"] } rodio = { version = "0.15", default-features = false, features = ["wav"] }
log = "0.4" log = "0.4"
@ -281,13 +281,13 @@ console_log = "1.0"
getrandom = { version = "0.2", features = ["js"] } getrandom = { version = "0.2", features = ["js"] }
rodio = { version = "0.15", default-features = false, features = ["wasm-bindgen", "wav"] } rodio = { version = "0.15", default-features = false, features = ["wasm-bindgen", "wav"] }
wasm-bindgen-futures = "0.4.20" wasm-bindgen-futures = "0.4.20"
wasm-bindgen = "=0.2.87" wasm-bindgen = "=0.2.90"
web-sys = { version = "0.3.53", features = [ web-sys = { version = "0.3.53", features = [
"Document", "Document",
"Window", "Window",
"Element", "Element",
]} ]}
wgpu = { version = "0.18", features = ["spirv", "webgl"]} wgpu = { version = "0.19", features = ["spirv", "webgl"]}
[build-dependencies] [build-dependencies]
anyhow = "1.0" anyhow = "1.0"

@ -100,7 +100,7 @@ Update dependencies to support SPIR-V module.
[dependencies] [dependencies]
image = "0.23" image = "0.23"
shaderc = "0.7" shaderc = "0.7"
wgpu = { version = "0.18", features = ["spirv"] } wgpu = { version = "0.19", features = ["spirv"] }
pollster = "0.3" pollster = "0.3"
``` ```

Loading…
Cancel
Save