migrated tutorials 1 and 2

master
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 = [
"code/showcase/imgui-demo",
#"code/showcase/pong",
"code/showcase/pong",
]

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

@ -1,7 +1,7 @@
use winit::{
event::*,
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
event_loop::EventLoop,
window::WindowBuilder, keyboard::{KeyCode, PhysicalKey},
};
#[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();
#[cfg(target_arch = "wasm32")]
@ -40,23 +40,23 @@ pub fn run() {
.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 {
ref event,
window_id,
} if window_id == window.id() => match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
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]
cfg-if = "1"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10"
log = "0.4"
wgpu = "0.18"
wgpu = "0.19"
pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6"
console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]}
wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [

@ -2,26 +2,27 @@ use std::iter;
use winit::{
event::*,
event_loop::{ControlFlow, EventLoop},
event_loop::EventLoop,
keyboard::{KeyCode, PhysicalKey},
window::{Window, WindowBuilder},
};
struct State {
struct State<'a> {
#[allow(dead_code)]
instance: wgpu::Instance,
#[allow(dead_code)]
adapter: wgpu::Adapter,
surface: wgpu::Surface,
surface: wgpu::Surface<'a>,
device: wgpu::Device,
queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration,
size: winit::dpi::PhysicalSize<u32>,
clear_color: wgpu::Color,
window: Window,
window: &'a Window,
}
impl State {
async fn new(window: Window) -> Self {
impl<'a> State<'a> {
async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size();
// 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.
// 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
.request_adapter(&wgpu::RequestAdapterOptions {
@ -50,10 +51,10 @@ impl State {
.request_device(
&wgpu::DeviceDescriptor {
label: None,
features: wgpu::Features::empty(),
required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if
// 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()
} else {
wgpu::Limits::default()
@ -81,6 +82,7 @@ impl State {
height: size.height,
present_mode: surface_caps.present_modes[0],
alpha_mode: surface_caps.alpha_modes[0],
desired_maximum_frame_latency: 2,
view_formats: vec![],
};
surface.configure(&device, &config);
@ -172,13 +174,13 @@ fn main() {
async fn run() {
env_logger::init();
let event_loop = EventLoop::new();
let event_loop = EventLoop::new().unwrap();
let window = WindowBuilder::new().build(&event_loop).unwrap();
// 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 {
Event::WindowEvent {
ref event,
@ -188,43 +190,40 @@ async fn run() {
match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
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) => {
state.resize(*physical_size);
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
// new_inner_size is &mut so w have to dereference it twice
state.resize(**new_inner_size);
WindowEvent::RedrawRequested => {
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();
}
// 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::{
event::*,
event_loop::{ControlFlow, EventLoop},
window::{Window, WindowBuilder},
event_loop::EventLoop,
window::{Window, WindowBuilder}, keyboard::{PhysicalKey, KeyCode},
};
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
struct State {
surface: wgpu::Surface,
struct State<'a> {
surface: wgpu::Surface<'a>,
device: wgpu::Device,
queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration,
@ -18,11 +18,11 @@ struct State {
// The window must be declared after the surface so
// it gets dropped after it as the surface contains
// unsafe references to the window's resources.
window: Window,
window: &'a Window,
}
impl State {
async fn new(window: Window) -> Self {
impl<'a> State<'a> {
async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size();
// The instance is a handle to our GPU
@ -32,11 +32,7 @@ impl State {
..Default::default()
});
// # Safety
//
// 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 surface = instance.create_surface(window).unwrap();
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
@ -51,10 +47,10 @@ impl State {
.request_device(
&wgpu::DeviceDescriptor {
label: None,
features: wgpu::Features::empty(),
required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if
// 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()
} else {
wgpu::Limits::default()
@ -83,6 +79,7 @@ impl State {
height: size.height,
present_mode: surface_caps.present_modes[0],
alpha_mode: surface_caps.alpha_modes[0],
desired_maximum_frame_latency: 2,
view_formats: vec![],
};
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();
#[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
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 {
Event::WindowEvent {
ref event,
@ -205,45 +202,42 @@ pub async fn run() {
match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
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) => {
state.resize(*physical_size);
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
// new_inner_size is &&mut so w have to dereference it twice
state.resize(**new_inner_size);
WindowEvent::RedrawRequested => {
// This tells winit that we want another frame after this one
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]
cfg-if = "1"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10"
log = "0.4"
wgpu = "0.18"
wgpu = "0.19"
pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6"
console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]}
wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
web-sys = { version = "0.3", features = [

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -10,12 +10,12 @@ crate-type = ["cdylib", "rlib"]
[dependencies]
cfg-if = "1"
env_logger = "0.10"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
anyhow = "1.0"
bytemuck = { version = "1.12", features = [ "derive" ] }
cgmath = "0.18"
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" }
rand = "0.8"
rodio = { version = "0.16", default-features = false, features = ["wav"] }
@ -28,13 +28,13 @@ console_log = "1.0"
getrandom = { version = "0.2", features = ["js"] }
rodio = { version = "0.16", default-features = false, features = ["wasm-bindgen", "wav"] }
wasm-bindgen-futures = "0.4.20"
wasm-bindgen = "=0.2.87"
wasm-bindgen = "=0.2.90"
web-sys = { version = "0.3.53", features = [
"Document",
"Window",
"Element",
]}
wgpu = { version = "0.18", features = ["spirv", "webgl"]}
wgpu = { version = "0.19", features = ["spirv", "webgl"]}
[build-dependencies]
anyhow = "1.0"

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

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

@ -1,4 +1,5 @@
use cgmath::*;
use winit::keyboard::KeyCode;
use std::f32::consts::FRAC_PI_2;
use std::time::Duration;
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 {
1.0
} else {
0.0
};
match key {
VirtualKeyCode::W | VirtualKeyCode::Up => {
KeyCode::KeyW | KeyCode::ArrowUp => {
self.amount_forward = amount;
true
}
VirtualKeyCode::S | VirtualKeyCode::Down => {
KeyCode::KeyS | KeyCode::ArrowDown => {
self.amount_backward = amount;
true
}
VirtualKeyCode::A | VirtualKeyCode::Left => {
KeyCode::KeyA | KeyCode::ArrowLeft => {
self.amount_left = amount;
true
}
VirtualKeyCode::D | VirtualKeyCode::Right => {
KeyCode::KeyD | KeyCode::ArrowRight => {
self.amount_right = amount;
true
}
VirtualKeyCode::Space => {
KeyCode::Space => {
self.amount_up = amount;
true
}
VirtualKeyCode::LShift => {
KeyCode::ShiftLeft => {
self.amount_down = amount;
true
}

@ -4,7 +4,8 @@ use std::iter;
use wgpu::util::DeviceExt;
use winit::{
event::*,
event_loop::{ControlFlow, EventLoop},
event_loop::EventLoop,
keyboard::{KeyCode, PhysicalKey},
window::Window,
};
@ -130,9 +131,9 @@ struct LightUniform {
_padding2: u32,
}
struct State {
window: Window,
surface: wgpu::Surface,
struct State<'a> {
window: &'a Window,
surface: wgpu::Surface<'a>,
device: wgpu::Device,
queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration,
@ -218,8 +219,8 @@ fn create_render_pipeline(
})
}
impl State {
async fn new(window: Window) -> Self {
impl<'a> State<'a> {
async fn new(window: &'a Window) -> State<'a> {
let size = window.inner_size();
// The instance is a handle to our GPU
@ -229,15 +230,11 @@ impl State {
..Default::default()
});
// # Safety
//
// 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 surface = instance.create_surface(window).unwrap();
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::default(),
power_preference: wgpu::PowerPreference::HighPerformance,
compatible_surface: Some(&surface),
force_fallback_adapter: false,
})
@ -247,10 +244,10 @@ impl State {
.request_device(
&wgpu::DeviceDescriptor {
label: None,
features: wgpu::Features::empty(),
required_features: wgpu::Features::empty(),
// WebGL doesn't support all of wgpu's features, so if
// 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()
} else {
wgpu::Limits::default()
@ -278,6 +275,7 @@ impl State {
height: size.height,
present_mode: surface_caps.present_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![],
};
@ -573,9 +571,9 @@ impl State {
fn input(&mut self, event: &WindowEvent) -> bool {
match event {
WindowEvent::KeyboardInput {
input:
KeyboardInput {
virtual_keycode: Some(key),
event:
KeyEvent {
physical_key: PhysicalKey::Code(key),
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 window = winit::window::WindowBuilder::new()
.with_title(title)
@ -720,20 +718,19 @@ pub async fn run() {
.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();
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 {
Event::MainEventsCleared => state.window().request_redraw(),
// NEW!
Event::DeviceEvent {
event: DeviceEvent::MouseMotion{ delta, },
.. // We're not using device_id currently
} => if state.mouse_pressed {
state.camera_controller.process_mouse(delta.0, delta.1)
}
// UPDATED!
Event::WindowEvent {
ref event,
window_id,
@ -742,39 +739,37 @@ pub async fn run() {
#[cfg(not(target_arch="wasm32"))]
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
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) => {
state.resize(*physical_size);
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
state.resize(**new_inner_size);
WindowEvent::RedrawRequested => {
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
for (i, n) in triangles_included.into_iter().enumerate() {
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.bitangent = (cgmath::Vector3::from(v.bitangent) * denom).into();
}

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

@ -9,7 +9,7 @@ edition = "2018"
[dependencies]
image = "0.24"
shaderc = "0.8"
wgpu = { version = "0.18", features = ["spirv"] }
wgpu = { version = "0.19", features = ["spirv"] }
pollster = "0.3"
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
[dependencies]
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10"
log = "0.4"
wgpu = "0.18"
wgpu = "0.19"
```
## Using Rust's new resolver
@ -110,7 +110,7 @@ cfg-if = "1"
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6"
console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]}
wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4.30"
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
[dependencies]
cfg-if = "1"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10"
log = "0.4"
wgpu = "0.18"
wgpu = "0.19"
pollster = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = "0.1.6"
console_log = "1.0"
wgpu = { version = "0.18", features = ["webgl"]}
wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
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]
image = "0.23"
cgmath = "0.18"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
env_logger = "0.10"
log = "0.4"
pollster = "0.3"
wgpu = "0.18"
wgpu = "0.19"
bytemuck = { version = "1.12", features = [ "derive" ] }
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:
```toml
wgpu = { version = "0.18", features = ["webgl"]}
wgpu = { version = "0.19", features = ["webgl"]}
```
</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" }
console_error_panic_hook = "0.1"
console_log = "1.0"
# wgpu = { version = "0.18", features = ["webgl"]}
# wgpu = { version = "0.19", features = ["webgl"]}
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
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
imgui = "0.7"
imgui-wgpu = "0.18"
imgui-wgpu = "0.19"
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]
cfg-if = "1"
env_logger = "0.10"
winit = "0.28"
winit = { version = "0.29", features = ["rwh_05"] }
anyhow = "1.0"
bytemuck = { version = "1.12", features = [ "derive" ] }
cgmath = "0.18"
pollster = "0.3"
wgpu = { version = "0.18", features = ["spirv"]}
wgpu_glyph = "0.18"
wgpu = { version = "0.19", features = ["spirv"]}
wgpu_glyph = "0.19"
rand = "0.8"
rodio = { version = "0.15", default-features = false, features = ["wav"] }
log = "0.4"
@ -281,13 +281,13 @@ console_log = "1.0"
getrandom = { version = "0.2", features = ["js"] }
rodio = { version = "0.15", default-features = false, features = ["wasm-bindgen", "wav"] }
wasm-bindgen-futures = "0.4.20"
wasm-bindgen = "=0.2.87"
wasm-bindgen = "=0.2.90"
web-sys = { version = "0.3.53", features = [
"Document",
"Window",
"Element",
]}
wgpu = { version = "0.18", features = ["spirv", "webgl"]}
wgpu = { version = "0.19", features = ["spirv", "webgl"]}
[build-dependencies]
anyhow = "1.0"

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

Loading…
Cancel
Save