From 822f2d6191d0f50cfc3ac64ac9fb989bc8da3243 Mon Sep 17 00:00:00 2001 From: Ben Hansen Date: Sat, 28 Aug 2021 16:11:33 -0600 Subject: [PATCH] started 0.10 --- Cargo.lock | 370 ++++-------------- Cargo.toml | 1 + code/beginner/tutorial1-window/Cargo.toml | 2 +- code/beginner/tutorial2-swapchain/Cargo.toml | 2 +- .../tutorial2-swapchain/src/challenge.rs | 40 +- code/beginner/tutorial2-swapchain/src/main.rs | 38 +- code/beginner/tutorial3-pipeline/Cargo.toml | 2 +- .../tutorial3-pipeline/src/challenge.rs | 35 +- code/beginner/tutorial3-pipeline/src/main.rs | 31 +- code/beginner/tutorial4-buffer/Cargo.toml | 2 +- .../tutorial4-buffer/src/challenge.rs | 33 +- code/beginner/tutorial4-buffer/src/main.rs | 33 +- code/beginner/tutorial5-textures/Cargo.toml | 2 +- .../tutorial5-textures/src/challenge.rs | 33 +- code/beginner/tutorial5-textures/src/main.rs | 33 +- .../tutorial5-textures/src/texture.rs | 2 +- code/beginner/tutorial6-uniforms/Cargo.toml | 2 +- .../tutorial6-uniforms/src/challenge.rs | 37 +- code/beginner/tutorial6-uniforms/src/main.rs | 37 +- .../tutorial6-uniforms/src/texture.rs | 2 +- code/beginner/tutorial7-instancing/Cargo.toml | 2 +- .../tutorial7-instancing/src/challenge.rs | 37 +- .../beginner/tutorial7-instancing/src/main.rs | 37 +- .../tutorial7-instancing/src/texture.rs | 2 +- code/beginner/tutorial8-depth/Cargo.toml | 2 +- .../beginner/tutorial8-depth/src/challenge.rs | 53 ++- code/beginner/tutorial8-depth/src/main.rs | 41 +- code/beginner/tutorial8-depth/src/texture.rs | 10 +- code/beginner/tutorial9-models/Cargo.toml | 2 +- code/beginner/tutorial9-models/src/main.rs | 41 +- code/beginner/tutorial9-models/src/texture.rs | 10 +- .../tutorial10-lighting/Cargo.toml | 2 +- .../tutorial10-lighting/src/main.rs | 43 +- .../tutorial10-lighting/src/texture.rs | 10 +- .../tutorial11-normals/Cargo.toml | 2 +- .../tutorial11-normals/src/main.rs | 43 +- .../tutorial11-normals/src/texture.rs | 10 +- .../intermediate/tutorial12-camera/Cargo.toml | 2 +- .../tutorial12-camera/src/main.rs | 41 +- .../tutorial12-camera/src/texture.rs | 10 +- .../tutorial13-threading/Cargo.toml | 2 +- .../tutorial13-threading/src/main.rs | 41 +- .../tutorial13-threading/src/texture.rs | 10 +- code/showcase/compute/Cargo.toml | 2 +- code/showcase/compute/src/main.rs | 33 +- code/showcase/compute/src/texture.rs | 10 +- code/showcase/framework/Cargo.toml | 2 +- code/showcase/framework/src/lib.rs | 20 +- code/showcase/framework/src/shader_canvas.rs | 6 +- code/showcase/framework/src/texture.rs | 10 +- code/showcase/gifs/Cargo.toml | 2 +- code/showcase/gifs/src/main.rs | 4 +- code/showcase/imgui-demo/Cargo.toml | 2 +- code/showcase/imgui-demo/src/main.rs | 8 +- code/showcase/pong/Cargo.toml | 2 +- code/showcase/pong/src/render/mod.rs | 31 +- code/showcase/windowless/Cargo.toml | 2 +- code/showcase/windowless/src/main.rs | 4 +- docs/beginner/tutorial1-window/README.md | 2 +- docs/beginner/tutorial2-swapchain/README.md | 43 +- docs/beginner/tutorial3-pipeline/README.md | 9 +- docs/beginner/tutorial4-buffer/README.md | 11 +- docs/beginner/tutorial5-textures/README.md | 15 +- docs/beginner/tutorial6-uniforms/README.md | 2 +- docs/beginner/tutorial8-depth/README.md | 18 +- .../tutorial10-lighting/README.md | 6 +- .../intermediate/tutorial11-normals/README.md | 2 +- docs/intermediate/tutorial12-camera/README.md | 2 +- docs/news/README.md | 6 +- docs/showcase/gifs/README.md | 4 +- docs/showcase/imgui-demo/README.md | 8 +- docs/showcase/windowless/README.md | 8 +- 72 files changed, 623 insertions(+), 841 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e6180182..2ba2a42f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,18 +83,18 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" +checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd" dependencies = [ "serde", ] [[package]] name = "ash" -version = "0.32.1" +version = "0.33.2+1.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06063a002a77d2734631db74e8f4ce7148b77fe522e6bca46f2ae7774fd48112" +checksum = "73e2b957a47afef62973ed5fa0a52afb3289c7a243bfbc3906090b8434971237" dependencies = [ "libloading 0.7.0", ] @@ -196,9 +196,6 @@ name = "cc" version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" -dependencies = [ - "jobserver", -] [[package]] name = "cfg-if" @@ -500,9 +497,9 @@ dependencies = [ [[package]] name = "d3d12" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091ed1b25fe47c7ff129fc440c23650b6114f36aa00bc7212cc8041879294428" +checksum = "2daefd788d1e96e0a9d66dee4b828b883509bc3ea9ce30665f04c3246372690c" dependencies = [ "bitflags", "libloading 0.7.0", @@ -586,15 +583,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" -[[package]] -name = "drm-fourcc" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbf3a5ed4671aabffefce172ff43d69c1f27dd2c6aea28e5212a70f32ada0cf" -dependencies = [ - "serde", -] - [[package]] name = "either" version = "1.5.3" @@ -614,21 +602,11 @@ dependencies = [ "termcolor", ] -[[package]] -name = "external-memory" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4dfe8d292b014422776a8c516862d2bff8a81b223a4461dfdc45f3862dc9d39" -dependencies = [ - "bitflags", - "drm-fourcc", -] - [[package]] name = "fixedbitset" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" [[package]] name = "fnv" @@ -712,168 +690,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gfx-auxil" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1694991b11d642680e82075a75c7c2bd75556b805efa7660b705689f05b1ab1c" -dependencies = [ - "fxhash", - "gfx-hal", - "spirv_cross", -] - -[[package]] -name = "gfx-backend-dx11" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9e453baf3aaef2b0c354ce0b3d63d76402e406a59b64b7182d123cfa6635ae" -dependencies = [ - "arrayvec", - "bitflags", - "gfx-auxil", - "gfx-hal", - "gfx-renderdoc", - "libloading 0.7.0", - "log", - "parking_lot", - "range-alloc", - "raw-window-handle", - "smallvec", - "spirv_cross", - "thunderdome", - "winapi", - "wio", -] - -[[package]] -name = "gfx-backend-dx12" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21506399f64a3c4d389182a89a30073856ae33eb712315456b4fd8f39ee7682a" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags", - "d3d12", - "gfx-auxil", - "gfx-hal", - "gfx-renderdoc", - "log", - "parking_lot", - "range-alloc", - "raw-window-handle", - "smallvec", - "spirv_cross", - "thunderdome", - "winapi", -] - -[[package]] -name = "gfx-backend-empty" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c8f813c47791918aa00dc9c9ddf961d23fa8c2a5d869e6cb8ea84f944820f4" -dependencies = [ - "gfx-hal", - "log", - "raw-window-handle", -] - -[[package]] -name = "gfx-backend-gl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bae057fc3a0ab23ecf97ae51d4017d27d5ddf0aab16ee6dcb58981af88c3152" -dependencies = [ - "arrayvec", - "bitflags", - "fxhash", - "gfx-hal", - "glow", - "js-sys", - "khronos-egl", - "libloading 0.7.0", - "log", - "naga", - "parking_lot", - "raw-window-handle", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gfx-backend-metal" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de85808e2a98994c6af925253f8a9593bc57180ef1ea137deab6d35cc949517" -dependencies = [ - "arrayvec", - "bitflags", - "block", - "cocoa-foundation", - "copyless", - "core-graphics-types", - "foreign-types", - "fxhash", - "gfx-hal", - "log", - "metal", - "naga", - "objc", - "parking_lot", - "profiling", - "range-alloc", - "raw-window-handle", - "storage-map", -] - -[[package]] -name = "gfx-backend-vulkan" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9861ec855acbbc65c0e4f966d761224886e811dc2c6d413a4776e9293d0e5c0" -dependencies = [ - "arrayvec", - "ash", - "byteorder", - "core-graphics-types", - "gfx-hal", - "gfx-renderdoc", - "inplace_it", - "log", - "naga", - "objc", - "parking_lot", - "raw-window-handle", - "smallvec", - "winapi", -] - -[[package]] -name = "gfx-hal" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbb575ea793dd0507b3082f4f2cde62dc9f3cebd98f5cd49ba2a4da97a976fd" -dependencies = [ - "bitflags", - "external-memory", - "naga", - "raw-window-handle", - "thiserror", -] - -[[package]] -name = "gfx-renderdoc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8027995e247e2426d3a00d13f5191dd56c314bff02dc4b54cbf727f1ba9c40a" -dependencies = [ - "libloading 0.7.0", - "log", - "renderdoc-sys", -] - [[package]] name = "gif" version = "0.10.3" @@ -913,9 +729,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "glow" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b80b98efaa8a34fce11d60dd2ce2760d5d83c373cbcc73bb87c2a3a84a54108" +checksum = "4f04649123493bc2483cbef4daddb45d40bbdae5adb221a63a23efdb0cc99520" dependencies = [ "js-sys", "slotmap", @@ -925,9 +741,9 @@ dependencies = [ [[package]] name = "gpu-alloc" -version = "0.4.7" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc1b6ca374e81862526786d9cb42357ce03706ed1b8761730caafd02ab91f3a" +checksum = "c481459c44304a1dfed23bd650bb3912e12c9f77d7871f86d7ed7c9730a52e79" dependencies = [ "bitflags", "gpu-alloc-types", @@ -944,13 +760,13 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d74668a6a6f0202e29f212a6d47ef8c7e092a76f4ab267b0065b6e0d175e45c6" +checksum = "d7a237f0419ab10d17006d55c62ac4f689a6bf52c75d3f38b8361d249e8d4b0b" dependencies = [ "bitflags", "gpu-descriptor-types", - "hashbrown", + "hashbrown 0.9.1", ] [[package]] @@ -971,6 +787,12 @@ dependencies = [ "ahash 0.4.7", ] +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "hermit-abi" version = "0.1.15" @@ -1012,12 +834,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.11.2", ] [[package]] @@ -1044,15 +866,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jobserver" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" -dependencies = [ - "libc", -] - [[package]] name = "jpeg-decoder" version = "0.1.20" @@ -1200,9 +1013,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d7d769f1c104b8388294d6594d491d2e21240636f5f94d37f8a0f3d7904450" +checksum = "e0514f491f4cc03632ab399ee01e2c1c1b12d3e1cf2d667c1ff5f87d6dcd2084" dependencies = [ "bitflags", "block", @@ -1257,9 +1070,9 @@ dependencies = [ [[package]] name = "naga" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef670817eef03d356d5a509ea275e7dd3a78ea9e24261ea3cb2dfed1abb08f64" +checksum = "568344dfe26b6caee4003da5be57bf8c2ef16d9525a2a5561164bcc462687f92" dependencies = [ "bit-set", "bitflags", @@ -1268,8 +1081,8 @@ dependencies = [ "log", "num-traits", "petgraph", - "rose_tree", - "spirv_headers", + "serde", + "spirv", "thiserror", ] @@ -1490,9 +1303,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" dependencies = [ "fixedbitset", "indexmap", @@ -1646,15 +1459,6 @@ dependencies = [ "serde", ] -[[package]] -name = "rose_tree" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284de9dae38774e2813aaabd7e947b4a6fe9b8c58c2309f754a487cdd50de1c2" -dependencies = [ - "petgraph", -] - [[package]] name = "rustc_version" version = "0.2.3" @@ -1785,9 +1589,12 @@ dependencies = [ [[package]] name = "slotmap" -version = "0.4.0" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c46a3482db8f247956e464d783693ece164ca056e6e67563ee5505bdb86452cd" +checksum = "a952280edbecfb1d4bd3cf2dbc309dc6ab523e53487c438ae21a6df09fe84bc4" +dependencies = [ + "version_check", +] [[package]] name = "smallvec" @@ -1815,35 +1622,15 @@ dependencies = [ ] [[package]] -name = "spirv_cross" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06db6bd7b6518f761593783e2896eefe55e90455efc5f44511078ce0426ed418" -dependencies = [ - "cc", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "spirv_headers" -version = "1.5.0" +name = "spirv" +version = "0.2.0+1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5b132530b1ac069df335577e3581765995cba5a13995cdbbdbc8fb057c532c" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" dependencies = [ "bitflags", "num-traits", ] -[[package]] -name = "storage-map" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418bb14643aa55a7841d5303f72cf512cfb323b8cc221d51580500a1ca75206c" -dependencies = [ - "lock_api", -] - [[package]] name = "strsim" version = "0.9.3" @@ -1910,12 +1697,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "thunderdome" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b4947742c93ece24a0032141d9caa3d853752e694a57e35029dd2bd08673e0" - [[package]] name = "tiff" version = "0.5.0" @@ -2436,9 +2217,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582" dependencies = [ "js-sys", "wasm-bindgen", @@ -2446,14 +2227,13 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd247f8b26fd3d42ef2f320d378025cd6e84d782ef749fab45cc3b981fbe3275" +checksum = "3d92a4fe73b1e7d7ef99938dacd49258cbf1ad87cdb5bf6efa20c27447442b45" dependencies = [ "arrayvec", "js-sys", "log", - "naga", "parking_lot", "raw-window-handle", "serde", @@ -2462,29 +2242,21 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "wgpu-core", + "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-core" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af5c8acd3ae5781a277cdf65a17f3a7135de5ae782775620e74ea16c9d47770" +checksum = "a81393a8d78194c7433d63afed2bf5f64feb126aef9ddd18eca3b16e9fac0cea" dependencies = [ "arrayvec", "bitflags", "cfg_aliases", "copyless", "fxhash", - "gfx-backend-dx11", - "gfx-backend-dx12", - "gfx-backend-empty", - "gfx-backend-gl", - "gfx-backend-metal", - "gfx-backend-vulkan", - "gfx-hal", - "gpu-alloc", - "gpu-descriptor", "log", "naga", "parking_lot", @@ -2494,9 +2266,44 @@ dependencies = [ "serde", "smallvec", "thiserror", + "wgpu-hal", "wgpu-types", ] +[[package]] +name = "wgpu-hal" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31bc8def88a1416997bff66b1f6788a4bd497546ad985db2d442d099c48f4246" +dependencies = [ + "arrayvec", + "ash", + "bit-set", + "bitflags", + "block", + "core-graphics-types", + "d3d12", + "foreign-types", + "fxhash", + "glow", + "gpu-alloc", + "gpu-descriptor", + "inplace_it", + "khronos-egl", + "libloading 0.7.0", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "thiserror", + "wgpu-types", + "winapi", +] + [[package]] name = "wgpu-subscriber" version = "0.1.0" @@ -2512,9 +2319,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5c9678cd533558e28b416d66947b099742df1939307478db54f867137f1b60" +checksum = "25feb2fbf24ab3219a9f10890ceb8e1ef02b13314ed89d64a9ae99dcad883e18" dependencies = [ "bitflags", "serde", @@ -2596,15 +2403,6 @@ dependencies = [ "x11-dl", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "x11-dl" version = "2.18.5" diff --git a/Cargo.toml b/Cargo.toml index 6bd08932..6a082246 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ # beginner tutorials "code/beginner/*", diff --git a/code/beginner/tutorial1-window/Cargo.toml b/code/beginner/tutorial1-window/Cargo.toml index a4dff8e0..5cefb005 100644 --- a/code/beginner/tutorial1-window/Cargo.toml +++ b/code/beginner/tutorial1-window/Cargo.toml @@ -17,5 +17,5 @@ winit = "0.25" cgmath = "0.18" env_logger = "0.9" log = "0.4" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" diff --git a/code/beginner/tutorial2-swapchain/Cargo.toml b/code/beginner/tutorial2-swapchain/Cargo.toml index 8e6f739f..efd2e470 100644 --- a/code/beginner/tutorial2-swapchain/Cargo.toml +++ b/code/beginner/tutorial2-swapchain/Cargo.toml @@ -12,7 +12,7 @@ winit = "0.25" cgmath = "0.18" env_logger = "0.9" log = "0.4" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" diff --git a/code/beginner/tutorial2-swapchain/src/challenge.rs b/code/beginner/tutorial2-swapchain/src/challenge.rs index 6b5e86f6..cf018f9d 100644 --- a/code/beginner/tutorial2-swapchain/src/challenge.rs +++ b/code/beginner/tutorial2-swapchain/src/challenge.rs @@ -7,11 +7,14 @@ use winit::{ }; struct State { + #[allow(dead_code)] + instance: wgpu::Instance, + #[allow(dead_code)] + adapter: wgpu::Adapter, surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, clear_color: wgpu::Color, } @@ -22,7 +25,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -44,26 +47,25 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let clear_color = wgpu::Color::BLACK; Self { + instance, + adapter, surface, device, queue, - sc_desc, - swap_chain, - + config, clear_color, - size, } } @@ -71,9 +73,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -94,8 +96,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -107,7 +109,7 @@ impl State { let _render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(self.clear_color), @@ -166,9 +168,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial2-swapchain/src/main.rs b/code/beginner/tutorial2-swapchain/src/main.rs index e93aa75e..d914b55a 100644 --- a/code/beginner/tutorial2-swapchain/src/main.rs +++ b/code/beginner/tutorial2-swapchain/src/main.rs @@ -7,11 +7,14 @@ use winit::{ }; struct State { + #[allow(dead_code)] + instance: wgpu::Instance, + #[allow(dead_code)] + adapter: wgpu::Adapter, surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, } @@ -21,7 +24,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -43,21 +46,22 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); Self { + instance, + adapter, surface, device, queue, - sc_desc, - swap_chain, + config, size, } } @@ -65,9 +69,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -78,8 +82,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -91,7 +95,7 @@ impl State { let _render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -156,9 +160,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial3-pipeline/Cargo.toml b/code/beginner/tutorial3-pipeline/Cargo.toml index 65fc9e93..11b4fdd6 100644 --- a/code/beginner/tutorial3-pipeline/Cargo.toml +++ b/code/beginner/tutorial3-pipeline/Cargo.toml @@ -10,7 +10,7 @@ winit = "0.25" cgmath = "0.18" env_logger = "0.9" log = "0.4" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" # NEW! diff --git a/code/beginner/tutorial3-pipeline/src/challenge.rs b/code/beginner/tutorial3-pipeline/src/challenge.rs index 9c9ba440..e3001137 100644 --- a/code/beginner/tutorial3-pipeline/src/challenge.rs +++ b/code/beginner/tutorial3-pipeline/src/challenge.rs @@ -10,8 +10,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, challenge_render_pipeline: wgpu::RenderPipeline, @@ -24,7 +23,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -46,14 +45,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let shader = device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some("Shader"), @@ -80,7 +79,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -127,7 +126,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState::REPLACE), write_mask: wgpu::ColorWrite::ALL, }], @@ -155,7 +154,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, challenge_render_pipeline, @@ -167,9 +166,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -193,8 +192,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -206,7 +205,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -277,9 +276,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial3-pipeline/src/main.rs b/code/beginner/tutorial3-pipeline/src/main.rs index 6c772284..bdbb1631 100644 --- a/code/beginner/tutorial3-pipeline/src/main.rs +++ b/code/beginner/tutorial3-pipeline/src/main.rs @@ -10,8 +10,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, // NEW! render_pipeline: wgpu::RenderPipeline, @@ -23,7 +22,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -45,14 +44,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, format: wgpu::TextureFormat::Bgra8UnormSrgb, width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let shader = device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some("Shader"), @@ -79,7 +78,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -112,7 +111,7 @@ impl State { device, queue, size, - sc_desc, + config, swap_chain, render_pipeline, } @@ -121,9 +120,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -134,8 +133,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -147,7 +146,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -214,9 +213,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial4-buffer/Cargo.toml b/code/beginner/tutorial4-buffer/Cargo.toml index 6f7882ab..27a7f653 100644 --- a/code/beginner/tutorial4-buffer/Cargo.toml +++ b/code/beginner/tutorial4-buffer/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" image = "0.23" cgmath = "0.18" winit = "0.25" -wgpu = "0.9" +wgpu = "0.10" env_logger = "0.9" log = "0.4" pollster = "0.2" diff --git a/code/beginner/tutorial4-buffer/src/challenge.rs b/code/beginner/tutorial4-buffer/src/challenge.rs index 87b81a53..a96ceac3 100644 --- a/code/beginner/tutorial4-buffer/src/challenge.rs +++ b/code/beginner/tutorial4-buffer/src/challenge.rs @@ -64,8 +64,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, @@ -87,7 +86,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -109,14 +108,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let shader = device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some("Shader"), @@ -143,7 +142,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -220,7 +219,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -237,9 +236,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -263,8 +262,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -276,7 +275,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -356,9 +355,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial4-buffer/src/main.rs b/code/beginner/tutorial4-buffer/src/main.rs index e58deb76..67f3de28 100644 --- a/code/beginner/tutorial4-buffer/src/main.rs +++ b/code/beginner/tutorial4-buffer/src/main.rs @@ -64,8 +64,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, // NEW! @@ -80,7 +79,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -102,14 +101,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let shader = device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some("Shader"), @@ -136,7 +135,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -180,7 +179,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -193,9 +192,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -206,8 +205,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -219,7 +218,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -288,9 +287,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial5-textures/Cargo.toml b/code/beginner/tutorial5-textures/Cargo.toml index 03c4d6dd..bd97c515 100644 --- a/code/beginner/tutorial5-textures/Cargo.toml +++ b/code/beginner/tutorial5-textures/Cargo.toml @@ -14,7 +14,7 @@ env_logger = "0.9" log = "0.4" pollster = "0.2" image = "0.23" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/beginner/tutorial5-textures/src/challenge.rs b/code/beginner/tutorial5-textures/src/challenge.rs index 4ae8d423..4c06d65a 100644 --- a/code/beginner/tutorial5-textures/src/challenge.rs +++ b/code/beginner/tutorial5-textures/src/challenge.rs @@ -67,8 +67,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -89,7 +88,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -110,14 +109,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -209,7 +208,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -253,7 +252,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -271,9 +270,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -297,8 +296,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -310,7 +309,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -386,9 +385,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial5-textures/src/main.rs b/code/beginner/tutorial5-textures/src/main.rs index 4b354ce6..81a5f32e 100644 --- a/code/beginner/tutorial5-textures/src/main.rs +++ b/code/beginner/tutorial5-textures/src/main.rs @@ -67,8 +67,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -86,7 +85,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -107,14 +106,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -186,7 +185,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -230,7 +229,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -245,9 +244,9 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } @@ -258,8 +257,8 @@ impl State { fn update(&mut self) {} - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -271,7 +270,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -341,9 +340,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial5-textures/src/texture.rs b/code/beginner/tutorial5-textures/src/texture.rs index 7efe9bed..efb18994 100644 --- a/code/beginner/tutorial5-textures/src/texture.rs +++ b/code/beginner/tutorial5-textures/src/texture.rs @@ -41,7 +41,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/beginner/tutorial6-uniforms/Cargo.toml b/code/beginner/tutorial6-uniforms/Cargo.toml index 8c67c325..05a3f032 100644 --- a/code/beginner/tutorial6-uniforms/Cargo.toml +++ b/code/beginner/tutorial6-uniforms/Cargo.toml @@ -12,7 +12,7 @@ env_logger = "0.9" log = "0.4" pollster = "0.2" image = "0.23" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/beginner/tutorial6-uniforms/src/challenge.rs b/code/beginner/tutorial6-uniforms/src/challenge.rs index 4c9a16b8..7202fa54 100644 --- a/code/beginner/tutorial6-uniforms/src/challenge.rs +++ b/code/beginner/tutorial6-uniforms/src/challenge.rs @@ -228,8 +228,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, index_buffer: wgpu::Buffer, @@ -251,7 +250,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -272,14 +271,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -330,7 +329,7 @@ impl State { eye: (0.0, 1.0, 2.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -396,7 +395,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -440,7 +439,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -460,12 +459,12 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.camera_staging.camera.aspect = - self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.config.width as f32 / self.config.height as f32; } } @@ -485,8 +484,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -498,7 +497,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -569,9 +568,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial6-uniforms/src/main.rs b/code/beginner/tutorial6-uniforms/src/main.rs index 9c4103ea..2f8df80a 100644 --- a/code/beginner/tutorial6-uniforms/src/main.rs +++ b/code/beginner/tutorial6-uniforms/src/main.rs @@ -212,8 +212,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -236,7 +235,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -257,14 +256,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -315,7 +314,7 @@ impl State { eye: (0.0, 1.0, 2.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -380,7 +379,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -424,7 +423,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -444,11 +443,11 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; } } @@ -466,8 +465,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -479,7 +478,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -550,9 +549,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial6-uniforms/src/texture.rs b/code/beginner/tutorial6-uniforms/src/texture.rs index 7efe9bed..efb18994 100644 --- a/code/beginner/tutorial6-uniforms/src/texture.rs +++ b/code/beginner/tutorial6-uniforms/src/texture.rs @@ -41,7 +41,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/beginner/tutorial7-instancing/Cargo.toml b/code/beginner/tutorial7-instancing/Cargo.toml index b5f82d51..260bd44d 100644 --- a/code/beginner/tutorial7-instancing/Cargo.toml +++ b/code/beginner/tutorial7-instancing/Cargo.toml @@ -12,7 +12,7 @@ env_logger = "0.9" log = "0.4" pollster = "0.2" image = "0.23" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/beginner/tutorial7-instancing/src/challenge.rs b/code/beginner/tutorial7-instancing/src/challenge.rs index 9aa9bafa..7282df47 100644 --- a/code/beginner/tutorial7-instancing/src/challenge.rs +++ b/code/beginner/tutorial7-instancing/src/challenge.rs @@ -280,8 +280,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, index_buffer: wgpu::Buffer, @@ -333,7 +332,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -354,14 +353,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -412,7 +411,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -509,7 +508,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -553,7 +552,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -575,11 +574,11 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; } } @@ -613,8 +612,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -626,7 +625,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -698,9 +697,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial7-instancing/src/main.rs b/code/beginner/tutorial7-instancing/src/main.rs index 9a5f40af..7bf52636 100644 --- a/code/beginner/tutorial7-instancing/src/main.rs +++ b/code/beginner/tutorial7-instancing/src/main.rs @@ -270,8 +270,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -297,7 +296,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -318,14 +317,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -376,7 +375,7 @@ impl State { eye: (0.0, 5.0, 10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -473,7 +472,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -517,7 +516,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -540,11 +539,11 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; } } @@ -562,8 +561,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -575,7 +574,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -648,9 +647,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial7-instancing/src/texture.rs b/code/beginner/tutorial7-instancing/src/texture.rs index 7efe9bed..efb18994 100644 --- a/code/beginner/tutorial7-instancing/src/texture.rs +++ b/code/beginner/tutorial7-instancing/src/texture.rs @@ -41,7 +41,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/beginner/tutorial8-depth/Cargo.toml b/code/beginner/tutorial8-depth/Cargo.toml index 4d110474..00e883ce 100644 --- a/code/beginner/tutorial8-depth/Cargo.toml +++ b/code/beginner/tutorial8-depth/Cargo.toml @@ -12,7 +12,7 @@ env_logger = "0.9" pollster = "0.2" image = "0.23" log = "0.4" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/beginner/tutorial8-depth/src/challenge.rs b/code/beginner/tutorial8-depth/src/challenge.rs index ce7f8f9b..1ed86740 100644 --- a/code/beginner/tutorial8-depth/src/challenge.rs +++ b/code/beginner/tutorial8-depth/src/challenge.rs @@ -308,8 +308,8 @@ struct DepthPass { } impl DepthPass { - fn new(device: &wgpu::Device, sc_desc: &wgpu::SwapChainDescriptor) -> Self { - let texture = texture::Texture::create_depth_texture(device, sc_desc, "depth_texture"); + fn new(device: &wgpu::Device, config: &wgpu::SurfaceConfiguration) -> Self { + let texture = texture::Texture::create_depth_texture(device, config, "depth_texture"); let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { label: Some("Depth Pass Layout"), @@ -386,7 +386,7 @@ impl DepthPass { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -425,8 +425,8 @@ impl DepthPass { } } - fn resize(&mut self, device: &wgpu::Device, sc_desc: &wgpu::SwapChainDescriptor) { - self.texture = texture::Texture::create_depth_texture(device, sc_desc, "depth_texture"); + fn resize(&mut self, device: &wgpu::Device, config: &wgpu::SurfaceConfiguration) { + self.texture = texture::Texture::create_depth_texture(device, config, "depth_texture"); self.bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { layout: &self.layout, entries: &[ @@ -447,7 +447,7 @@ impl DepthPass { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Depth Visual Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Load, @@ -468,8 +468,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, index_buffer: wgpu::Buffer, @@ -495,7 +494,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -516,14 +515,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -574,7 +573,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -671,7 +670,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -721,13 +720,13 @@ impl State { }); let num_indices = INDICES.len() as u32; - let depth_pass = DepthPass::new(&device, &sc_desc); + let depth_pass = DepthPass::new(&device, &config); Self { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -749,13 +748,13 @@ impl State { pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; + self.config.width = new_size.width; + self.config.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); - self.depth_pass.resize(&self.device, &self.sc_desc); + self.surface.configure(&self.device, &self.config); + self.depth_pass.resize(&self.device, &self.config); - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; } } @@ -773,8 +772,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -786,7 +785,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -867,9 +866,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial8-depth/src/main.rs b/code/beginner/tutorial8-depth/src/main.rs index e87d7393..576c65bb 100644 --- a/code/beginner/tutorial8-depth/src/main.rs +++ b/code/beginner/tutorial8-depth/src/main.rs @@ -279,8 +279,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -307,7 +306,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -328,14 +327,14 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); let diffuse_texture = @@ -386,7 +385,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -465,7 +464,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -486,7 +485,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -536,7 +535,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -559,14 +558,14 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); + self.camera.aspect = self.config.width as f32 / self.config.height as f32; // NEW! self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -586,8 +585,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -599,7 +598,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -677,9 +676,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial8-depth/src/texture.rs b/code/beginner/tutorial8-depth/src/texture.rs index b322089c..aa8f912e 100644 --- a/code/beginner/tutorial8-depth/src/texture.rs +++ b/code/beginner/tutorial8-depth/src/texture.rs @@ -14,12 +14,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -29,7 +29,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -84,7 +84,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/beginner/tutorial9-models/Cargo.toml b/code/beginner/tutorial9-models/Cargo.toml index c12e7b26..7aa8e33f 100644 --- a/code/beginner/tutorial9-models/Cargo.toml +++ b/code/beginner/tutorial9-models/Cargo.toml @@ -13,7 +13,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "3.0" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/beginner/tutorial9-models/src/main.rs b/code/beginner/tutorial9-models/src/main.rs index 2454eebc..7142e558 100644 --- a/code/beginner/tutorial9-models/src/main.rs +++ b/code/beginner/tutorial9-models/src/main.rs @@ -223,8 +223,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, @@ -245,7 +244,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -267,15 +266,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -307,7 +306,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -395,7 +394,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -416,7 +415,7 @@ impl State { module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState { color: wgpu::BlendComponent::REPLACE, alpha: wgpu::BlendComponent::REPLACE, @@ -454,7 +453,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -472,14 +471,14 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -498,8 +497,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -511,7 +510,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -595,9 +594,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/beginner/tutorial9-models/src/texture.rs b/code/beginner/tutorial9-models/src/texture.rs index f3376b3e..088fc60b 100644 --- a/code/beginner/tutorial9-models/src/texture.rs +++ b/code/beginner/tutorial9-models/src/texture.rs @@ -26,12 +26,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -41,7 +41,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -97,7 +97,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/intermediate/tutorial10-lighting/Cargo.toml b/code/intermediate/tutorial10-lighting/Cargo.toml index cceaa11b..8380cb60 100644 --- a/code/intermediate/tutorial10-lighting/Cargo.toml +++ b/code/intermediate/tutorial10-lighting/Cargo.toml @@ -13,7 +13,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "3.0" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/intermediate/tutorial10-lighting/src/main.rs b/code/intermediate/tutorial10-lighting/src/main.rs index 5b31c9bf..e24e1cb6 100644 --- a/code/intermediate/tutorial10-lighting/src/main.rs +++ b/code/intermediate/tutorial10-lighting/src/main.rs @@ -253,8 +253,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, camera: Camera, @@ -336,7 +335,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -357,15 +356,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -397,7 +396,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -514,7 +513,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -536,7 +535,7 @@ impl State { create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], shader, @@ -557,7 +556,7 @@ impl State { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], shader, @@ -568,7 +567,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, obj_model, @@ -590,14 +589,14 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -629,8 +628,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -642,7 +641,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -730,9 +729,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/intermediate/tutorial10-lighting/src/texture.rs b/code/intermediate/tutorial10-lighting/src/texture.rs index f3376b3e..088fc60b 100644 --- a/code/intermediate/tutorial10-lighting/src/texture.rs +++ b/code/intermediate/tutorial10-lighting/src/texture.rs @@ -26,12 +26,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -41,7 +41,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -97,7 +97,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/intermediate/tutorial11-normals/Cargo.toml b/code/intermediate/tutorial11-normals/Cargo.toml index 1a10b700..3b8b7dfa 100644 --- a/code/intermediate/tutorial11-normals/Cargo.toml +++ b/code/intermediate/tutorial11-normals/Cargo.toml @@ -13,7 +13,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "3.0" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/intermediate/tutorial11-normals/src/main.rs b/code/intermediate/tutorial11-normals/src/main.rs index 939625bf..3bd097b9 100644 --- a/code/intermediate/tutorial11-normals/src/main.rs +++ b/code/intermediate/tutorial11-normals/src/main.rs @@ -252,8 +252,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, camera: Camera, @@ -337,7 +336,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -358,15 +357,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -418,7 +417,7 @@ impl State { eye: (0.0, 5.0, -10.0).into(), target: (0.0, 0.0, 0.0).into(), up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, @@ -535,7 +534,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -557,7 +556,7 @@ impl State { create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], shader, @@ -578,7 +577,7 @@ impl State { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], shader, @@ -619,7 +618,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, obj_model, @@ -643,14 +642,14 @@ impl State { fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { - self.camera.aspect = self.sc_desc.width as f32 / self.sc_desc.height as f32; + self.camera.aspect = self.config.width as f32 / self.config.height as f32; self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -682,8 +681,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -695,7 +694,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -783,9 +782,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/intermediate/tutorial11-normals/src/texture.rs b/code/intermediate/tutorial11-normals/src/texture.rs index 30f15da5..37209a57 100644 --- a/code/intermediate/tutorial11-normals/src/texture.rs +++ b/code/intermediate/tutorial11-normals/src/texture.rs @@ -27,12 +27,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -42,7 +42,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -104,7 +104,7 @@ impl Texture { } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/intermediate/tutorial12-camera/Cargo.toml b/code/intermediate/tutorial12-camera/Cargo.toml index 39e24395..a7aaa6e8 100644 --- a/code/intermediate/tutorial12-camera/Cargo.toml +++ b/code/intermediate/tutorial12-camera/Cargo.toml @@ -13,7 +13,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "3.0" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/intermediate/tutorial12-camera/src/main.rs b/code/intermediate/tutorial12-camera/src/main.rs index 8e677bae..5ac2172e 100644 --- a/code/intermediate/tutorial12-camera/src/main.rs +++ b/code/intermediate/tutorial12-camera/src/main.rs @@ -129,8 +129,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, camera: camera::Camera, // UPDATED! @@ -217,7 +216,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -238,15 +237,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -297,7 +296,7 @@ impl State { // UPDATED! let camera = camera::Camera::new((0.0, 5.0, 10.0), cgmath::Deg(-90.0), cgmath::Deg(-20.0)); let projection = - camera::Projection::new(sc_desc.width, sc_desc.height, cgmath::Deg(45.0), 0.1, 100.0); + camera::Projection::new(config.width, config.height, cgmath::Deg(45.0), 0.1, 100.0); let camera_controller = camera::CameraController::new(4.0, 0.4); let mut camera_uniform = CameraUniform::new(); @@ -411,7 +410,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -433,7 +432,7 @@ impl State { create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], shader, @@ -454,7 +453,7 @@ impl State { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], shader, @@ -495,7 +494,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, obj_model, @@ -525,12 +524,12 @@ impl State { if new_size.width > 0 && new_size.height > 0 { self.projection.resize(new_size.width, new_size.height); self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -589,8 +588,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -602,7 +601,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -700,9 +699,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/intermediate/tutorial12-camera/src/texture.rs b/code/intermediate/tutorial12-camera/src/texture.rs index 30f15da5..37209a57 100644 --- a/code/intermediate/tutorial12-camera/src/texture.rs +++ b/code/intermediate/tutorial12-camera/src/texture.rs @@ -27,12 +27,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -42,7 +42,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -104,7 +104,7 @@ impl Texture { } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/intermediate/tutorial13-threading/Cargo.toml b/code/intermediate/tutorial13-threading/Cargo.toml index cb2949a5..1f6904f3 100644 --- a/code/intermediate/tutorial13-threading/Cargo.toml +++ b/code/intermediate/tutorial13-threading/Cargo.toml @@ -14,7 +14,7 @@ image = "0.23" log = "0.4" rayon = "1.4" # NEW! tobj = "3.0" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" [build-dependencies] diff --git a/code/intermediate/tutorial13-threading/src/main.rs b/code/intermediate/tutorial13-threading/src/main.rs index f1c52751..529cb1e0 100644 --- a/code/intermediate/tutorial13-threading/src/main.rs +++ b/code/intermediate/tutorial13-threading/src/main.rs @@ -129,8 +129,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, camera: camera::Camera, @@ -216,7 +215,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -237,15 +236,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -296,7 +295,7 @@ impl State { // UPDATED! let camera = camera::Camera::new((0.0, 5.0, 10.0), cgmath::Deg(-90.0), cgmath::Deg(-20.0)); let projection = - camera::Projection::new(sc_desc.width, sc_desc.height, cgmath::Deg(45.0), 0.1, 100.0); + camera::Projection::new(config.width, config.height, cgmath::Deg(45.0), 0.1, 100.0); let camera_controller = camera::CameraController::new(4.0, 0.4); let mut camera_uniform = CameraUniform::new(); @@ -410,7 +409,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -432,7 +431,7 @@ impl State { create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], shader, @@ -453,7 +452,7 @@ impl State { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], shader, @@ -494,7 +493,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, obj_model, @@ -522,12 +521,12 @@ impl State { if new_size.width > 0 && new_size.height > 0 { self.projection.resize(new_size.width, new_size.height); self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -584,8 +583,8 @@ impl State { ); } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { - let frame = self.swap_chain.get_current_frame()?.output; + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { + let frame = self.surface.get_current_frame()?.output.texture.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = self .device @@ -597,7 +596,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -693,9 +692,9 @@ fn main() { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } diff --git a/code/intermediate/tutorial13-threading/src/texture.rs b/code/intermediate/tutorial13-threading/src/texture.rs index 30f15da5..37209a57 100644 --- a/code/intermediate/tutorial13-threading/src/texture.rs +++ b/code/intermediate/tutorial13-threading/src/texture.rs @@ -27,12 +27,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -42,7 +42,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -104,7 +104,7 @@ impl Texture { } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/showcase/compute/Cargo.toml b/code/showcase/compute/Cargo.toml index 4c4afb5f..c92c7791 100644 --- a/code/showcase/compute/Cargo.toml +++ b/code/showcase/compute/Cargo.toml @@ -14,7 +14,7 @@ image = "0.23" log = "0.4" rayon = "1.4" tobj = "2.0" -wgpu = { version = "0.9", features = ["trace"] } +wgpu = { version = "0.10", features = ["trace"] } winit = "0.25" [build-dependencies] diff --git a/code/showcase/compute/src/main.rs b/code/showcase/compute/src/main.rs index fce9d1d0..54f1e489 100644 --- a/code/showcase/compute/src/main.rs +++ b/code/showcase/compute/src/main.rs @@ -115,8 +115,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, obj_model: model::Model, camera: camera::Camera, @@ -146,7 +145,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -168,15 +167,15 @@ impl State { .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -227,7 +226,7 @@ impl State { // UPDATED! let camera = camera::Camera::new((0.0, 5.0, 10.0), cgmath::Deg(-90.0), cgmath::Deg(-20.0)); let projection = - camera::Projection::new(sc_desc.width, sc_desc.height, cgmath::Deg(45.0), 0.1, 100.0); + camera::Projection::new(config.width, config.height, cgmath::Deg(45.0), 0.1, 100.0); let camera_controller = camera::CameraController::new(4.0, 0.4); let mut camera_uniform = CameraUniform::new(); @@ -345,7 +344,7 @@ impl State { }); let depth_texture = - texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); + texture::Texture::create_depth_texture(&device, &config, "depth_texture"); let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -361,7 +360,7 @@ impl State { let render_pipeline = create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], wgpu::include_spirv!("shader.vert.spv"), @@ -378,7 +377,7 @@ impl State { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], wgpu::include_spirv!("light.vert.spv"), @@ -420,7 +419,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, obj_model, @@ -449,12 +448,12 @@ impl State { if new_size.width > 0 && new_size.height > 0 { self.projection.resize(new_size.width, new_size.height); self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); self.depth_texture = texture::Texture::create_depth_texture( &self.device, - &self.sc_desc, + &self.config, "depth_texture", ); } @@ -535,7 +534,7 @@ impl State { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Render Pass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { diff --git a/code/showcase/compute/src/texture.rs b/code/showcase/compute/src/texture.rs index 30f15da5..37209a57 100644 --- a/code/showcase/compute/src/texture.rs +++ b/code/showcase/compute/src/texture.rs @@ -27,12 +27,12 @@ impl Texture { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, label: &str, ) -> Self { let size = wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -42,7 +42,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -104,7 +104,7 @@ impl Texture { } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); queue.write_texture( diff --git a/code/showcase/framework/Cargo.toml b/code/showcase/framework/Cargo.toml index 17a8feb9..95cb99c1 100644 --- a/code/showcase/framework/Cargo.toml +++ b/code/showcase/framework/Cargo.toml @@ -14,7 +14,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "2.0" -wgpu = "0.9" +wgpu = "0.10" wgpu-subscriber = "0.1" winit = "0.25" diff --git a/code/showcase/framework/src/lib.rs b/code/showcase/framework/src/lib.rs index f327b158..f7c3d613 100644 --- a/code/showcase/framework/src/lib.rs +++ b/code/showcase/framework/src/lib.rs @@ -26,7 +26,7 @@ use winit::window::{Window, WindowBuilder}; pub struct Display { surface: wgpu::Surface, pub window: Window, - pub sc_desc: wgpu::SwapChainDescriptor, + pub config: wgpu::SurfaceConfiguration, pub swap_chain: wgpu::SwapChain, pub device: wgpu::Device, pub queue: wgpu::Queue, @@ -35,7 +35,7 @@ pub struct Display { impl Display { pub async fn new(window: Window) -> Result { let size = window.inner_size(); - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(&window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -55,19 +55,19 @@ impl Display { ) .await .unwrap(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); Ok(Self { surface, window, - sc_desc, + config, swap_chain, device, queue, @@ -75,9 +75,9 @@ impl Display { } pub fn resize(&mut self, width: u32, height: u32) { - self.sc_desc.width = width; - self.sc_desc.height = height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = width; + self.config.height = height; + self.surface.configure(&self.device, &self.config); } } diff --git a/code/showcase/framework/src/shader_canvas.rs b/code/showcase/framework/src/shader_canvas.rs index 313bd35b..46eb80cd 100644 --- a/code/showcase/framework/src/shader_canvas.rs +++ b/code/showcase/framework/src/shader_canvas.rs @@ -127,9 +127,9 @@ impl<'a> ShaderCanvasBuilder<'a> { self } - pub fn use_swap_chain_desc(&mut self, sc_desc: &wgpu::SwapChainDescriptor) -> &mut Self { - self.display_format(sc_desc.format); - self.canvas_size(sc_desc.width as f32, sc_desc.height as f32) + pub fn use_swap_chain_desc(&mut self, config: &wgpu::SurfaceConfiguration) -> &mut Self { + self.display_format(config.format); + self.canvas_size(config.width as f32, config.height as f32) } pub fn fragment_shader(&mut self, code: wgpu::ShaderModuleDescriptor<'a>) -> &mut Self { diff --git a/code/showcase/framework/src/texture.rs b/code/showcase/framework/src/texture.rs index 546a78d3..eb81d6ed 100644 --- a/code/showcase/framework/src/texture.rs +++ b/code/showcase/framework/src/texture.rs @@ -88,7 +88,7 @@ impl<'a> Texture<'a> { } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, label: None, }; let texture = device.create_texture(&desc); @@ -132,20 +132,20 @@ impl<'a> Texture<'a> { pub fn create_depth_texture( device: &wgpu::Device, - sc_desc: &wgpu::SwapChainDescriptor, + config: &wgpu::SurfaceConfiguration, ) -> Self { let desc = wgpu::TextureDescriptor { label: None, size: wgpu::Extent3d { - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, }; Self::from_descriptor(device, desc) } diff --git a/code/showcase/gifs/Cargo.toml b/code/showcase/gifs/Cargo.toml index 48138835..0847fb4b 100644 --- a/code/showcase/gifs/Cargo.toml +++ b/code/showcase/gifs/Cargo.toml @@ -14,7 +14,7 @@ pollster = "0.2" image = "0.23" log = "0.4" tobj = "3.1" -wgpu = "0.9" +wgpu = "0.10" winit = "0.25" gif = "0.10.3" diff --git a/code/showcase/gifs/src/main.rs b/code/showcase/gifs/src/main.rs index bbd3dfca..b70e244c 100644 --- a/code/showcase/gifs/src/main.rs +++ b/code/showcase/gifs/src/main.rs @@ -4,7 +4,7 @@ use anyhow::*; use std::{iter, mem, num::NonZeroU32}; async fn run() { - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions::default()) .await @@ -44,7 +44,7 @@ async fn run() { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::COPY_SRC | wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT, label: None, }; let render_target = framework::Texture::from_descriptor(&device, rt_desc); diff --git a/code/showcase/imgui-demo/Cargo.toml b/code/showcase/imgui-demo/Cargo.toml index 7a6800b2..9d0d2d8a 100644 --- a/code/showcase/imgui-demo/Cargo.toml +++ b/code/showcase/imgui-demo/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] anyhow = "1.0" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" imgui = "0.7" imgui-wgpu = "0.15" diff --git a/code/showcase/imgui-demo/src/main.rs b/code/showcase/imgui-demo/src/main.rs index e32f4624..933e3a9e 100644 --- a/code/showcase/imgui-demo/src/main.rs +++ b/code/showcase/imgui-demo/src/main.rs @@ -14,7 +14,7 @@ struct ImguiDemo { impl framework::Demo for ImguiDemo { fn init(display: &framework::Display) -> Result { let canvas = framework::ShaderCanvasBuilder::new() - .display_format(display.sc_desc.format) + .display_format(display.config.format) .build(&display.device)?; let mut imgui = imgui::Context::create(); @@ -39,7 +39,7 @@ impl framework::Demo for ImguiDemo { }]); let renderer_config = RendererConfig { - texture_format: display.sc_desc.format, + texture_format: display.config.format, ..Default::default() }; let renderer = Renderer::new(&mut imgui, &display.device, &display.queue, renderer_config); @@ -102,8 +102,8 @@ impl framework::Demo for ImguiDemo { &display.queue, &mut encoder, &output.view, - display.sc_desc.width as f32, - display.sc_desc.height as f32, + display.config.width as f32, + display.config.height as f32, ); // Render the UI diff --git a/code/showcase/pong/Cargo.toml b/code/showcase/pong/Cargo.toml index 47a94f30..f77fada9 100644 --- a/code/showcase/pong/Cargo.toml +++ b/code/showcase/pong/Cargo.toml @@ -11,7 +11,7 @@ anyhow = "1.0" bytemuck = { version = "1.4", features = [ "derive" ] } cgmath = "0.18" pollster = "0.2" -wgpu = "0.9" +wgpu = "0.10" wgpu_glyph = "0.12" rand = "0.8" rodio = "0.14" diff --git a/code/showcase/pong/src/render/mod.rs b/code/showcase/pong/src/render/mod.rs index b7b44501..8581de9e 100644 --- a/code/showcase/pong/src/render/mod.rs +++ b/code/showcase/pong/src/render/mod.rs @@ -19,8 +19,7 @@ pub struct Render { adapter: wgpu::Adapter, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, index_buffer: wgpu::Buffer, @@ -30,18 +29,18 @@ pub struct Render { impl Render { pub fn width(&self) -> f32 { - self.sc_desc.width as f32 + self.config.width as f32 } #[allow(dead_code)] pub fn height(&self) -> f32 { - self.sc_desc.height as f32 + self.config.height as f32 } pub async fn new(window: &Window, video_mode: &VideoMode) -> Self { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -63,14 +62,14 @@ impl Render { .unwrap(); let size = video_mode.size(); - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { bind_group_layouts: &[], @@ -80,7 +79,7 @@ impl Render { let pipeline = create_render_pipeline( &device, &pipeline_layout, - sc_desc.format, + config.format, &[Vertex::DESC], wgpu::include_spirv!("../../res/shaders/textured.vert.spv"), wgpu::include_spirv!("../../res/shaders/textured.frag.spv"), @@ -102,7 +101,7 @@ impl Render { let font = ab_glyph::FontArc::try_from_slice(FONT_BYTES).unwrap(); let glyph_brush = - wgpu_glyph::GlyphBrushBuilder::using_font(font).build(&device, sc_desc.format); + wgpu_glyph::GlyphBrushBuilder::using_font(font).build(&device, config.format); let staging_belt = wgpu::util::StagingBelt::new(1024); Self { @@ -110,7 +109,7 @@ impl Render { adapter, device, queue, - sc_desc, + config, swap_chain, pipeline, vertex_buffer, @@ -186,16 +185,16 @@ impl Render { &mut self.staging_belt, &mut encoder, &frame.output.view, - self.sc_desc.width, - self.sc_desc.height, + self.config.width, + self.config.height, ) .unwrap(); self.staging_belt.finish(); self.queue.submit(iter::once(encoder.finish())); } - Err(wgpu::SwapChainError::Outdated) => { - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + Err(wgpu::SurfaceError::Outdated) => { + self.surface.configure(&self.device, &self.config); } Err(e) => { eprintln!("Error: {}", e); diff --git a/code/showcase/windowless/Cargo.toml b/code/showcase/windowless/Cargo.toml index 097dd02d..de49875b 100644 --- a/code/showcase/windowless/Cargo.toml +++ b/code/showcase/windowless/Cargo.toml @@ -12,7 +12,7 @@ raw-window-handle = "0.3" winit = "0.25" shaderc = "0.7" cgmath = "0.18" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" [[bin]] diff --git a/code/showcase/windowless/src/main.rs b/code/showcase/windowless/src/main.rs index 15c97e1c..cd72b931 100644 --- a/code/showcase/windowless/src/main.rs +++ b/code/showcase/windowless/src/main.rs @@ -1,7 +1,7 @@ use std::num::NonZeroU32; async fn run() { - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::default(), @@ -25,7 +25,7 @@ async fn run() { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::COPY_SRC | wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT, label: None, }; let texture = device.create_texture(&texture_desc); diff --git a/docs/beginner/tutorial1-window/README.md b/docs/beginner/tutorial1-window/README.md index 95fccc10..7a8ade90 100644 --- a/docs/beginner/tutorial1-window/README.md +++ b/docs/beginner/tutorial1-window/README.md @@ -13,7 +13,7 @@ winit = "0.25" cgmath = "0.18" env_logger = "0.9" log = "0.4" -wgpu = "0.9" +wgpu = "0.10" pollster = "0.2" ``` diff --git a/docs/beginner/tutorial2-swapchain/README.md b/docs/beginner/tutorial2-swapchain/README.md index f5236015..ddda6f88 100644 --- a/docs/beginner/tutorial2-swapchain/README.md +++ b/docs/beginner/tutorial2-swapchain/README.md @@ -11,8 +11,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, } @@ -34,7 +33,7 @@ impl State { todo!() } - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { todo!() } } @@ -53,7 +52,7 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let instance = wgpu::Instance::new(wgpu::Backends::all()); let surface = unsafe { instance.create_surface(window) }; let adapter = instance.request_adapter( &wgpu::RequestAdapterOptions { @@ -71,10 +70,10 @@ The options I've passed to `request_adapter` aren't guaranteed to work for all d ```rust let adapter = instance - .enumerate_adapters(wgpu::BackendBit::PRIMARY) + .enumerate_adapters(wgpu::Backends::all()) .filter(|adapter| { // Check if this adapter supports our surface - adapter.get_swap_chain_preferred_format(&surface).is_some() + surface.get_preferred_format(&adapter).is_some() }) .first() .unwrap() @@ -112,18 +111,18 @@ You can view a full list of features [here](https://docs.rs/wgpu/0.7.0/wgpu/stru The `limits` field describes the limit of certain types of resource we can create. We'll use the defaults for this tutorial, so we can support most devices. You can view a list of limits [here](https://docs.rs/wgpu/0.7.0/wgpu/struct.Limits.html). ```rust - let sc_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: adapter.get_swap_chain_preferred_format(&surface).unwrap(), + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, }; - let swap_chain = device.create_swap_chain(&surface, &sc_desc); + surface.configure(&device, &config); ``` -Here we are defining and creating the `swap_chain`. The `usage` field describes how the `swap_chain`'s underlying textures will be used. `RENDER_ATTACHMENT` specifies that the textures will be used to write to the screen (we'll talk about more `TextureUsage`s later). +Here we are defining and creating the `swap_chain`. The `usage` field describes how the `swap_chain`'s underlying textures will be used. `RENDER_ATTACHMENT` specifies that the textures will be used to write to the screen (we'll talk about more `TextureUsages`s later). -The `format` defines how the `swap_chain`s textures will be stored on the gpu. Different displays prefer different formats. We use `adapter.get_swap_chain_preferred_format()` to figure out the best format to use. +The `format` defines how the `swap_chain`s textures will be stored on the gpu. Different displays prefer different formats. We use `adapter.get_preferred_format()` to figure out the best format to use. `width` and `height`, are the width and height in pixels of the swap chain. This should usually be the width and height of the window. @@ -136,7 +135,7 @@ At the end of the method, we simply return the resulting struct. surface, device, queue, - sc_desc, + config, swap_chain, size, } @@ -159,16 +158,16 @@ You can use heavier libraries like [async_std](https://docs.rs/async_std) and [t ## resize() -If we want to support resizing in our application, we're going to need to recreate the `swap_chain` everytime the window's size changes. That's the reason we stored the physical `size` and the `sc_desc` used to create the swapchain. With all of these, the resize method is very simple. +If we want to support resizing in our application, we're going to need to recreate the `swap_chain` everytime the window's size changes. That's the reason we stored the physical `size` and the `config` used to create the swapchain. With all of these, the resize method is very simple. ```rust // impl State pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.size = new_size; - self.sc_desc.width = new_size.width; - self.sc_desc.height = new_size.height; - self.swap_chain = self.device.create_swap_chain(&self.surface, &self.sc_desc); + self.config.width = new_size.width; + self.config.height = new_size.height; + self.surface.configure(&self.device, &self.config); } } ``` @@ -261,7 +260,7 @@ Here's where the magic happens. First we need to get a frame to render to. This ```rust // impl State -fn render(&mut self) -> Result<(), wgpu::SwapChainError> { +fn render(&mut self) -> Result<(), wgpu::SurfaceError> { let frame = self .swap_chain .get_current_frame()? @@ -284,7 +283,7 @@ Now we can actually get to clearing the screen (long time coming). We need to us label: Some("Render Pass"), color_attachments: &[ wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { @@ -326,9 +325,9 @@ event_loop.run(move |event, _, control_flow| { match state.render() { Ok(_) => {} // Recreate the swap_chain if lost - Err(wgpu::SwapChainError::Lost) => state.resize(state.size), + Err(wgpu::SurfaceError::Lost) => state.resize(state.size), // The system is out of memory, we should probably quit - Err(wgpu::SwapChainError::OutOfMemory) => *control_flow = ControlFlow::Exit, + Err(wgpu::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit, // All other errors (Outdated, Timeout) should be resolved by the next frame Err(e) => eprintln!("{:?}", e), } @@ -365,7 +364,7 @@ A `RenderPassDescriptor` only has three fields: `label`, `color_attachments` and ```rust wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color { diff --git a/docs/beginner/tutorial3-pipeline/README.md b/docs/beginner/tutorial3-pipeline/README.md index aba90784..596391fb 100644 --- a/docs/beginner/tutorial3-pipeline/README.md +++ b/docs/beginner/tutorial3-pipeline/README.md @@ -130,8 +130,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, // NEW! render_pipeline: wgpu::RenderPipeline, @@ -174,7 +173,7 @@ let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescrip module: &shader, entry_point: "main", targets: &[wgpu::ColorTargetState { // 4. - format: sc_desc.format, + format: config.format, blend: Some(wgpu::BlendState::REPLACE), write_mask: wgpu::ColorWrite::ALL, }], @@ -235,7 +234,7 @@ Self { surface, device, queue, - sc_desc, + config, swap_chain, size, // NEW! @@ -257,7 +256,7 @@ If you run your program now, it'll take a little longer to start, but it will st color_attachments: &[ // This is what [[location(0)]] in the fragment shader targets wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear( diff --git a/docs/beginner/tutorial4-buffer/README.md b/docs/beginner/tutorial4-buffer/README.md index b345a2fb..86d20457 100644 --- a/docs/beginner/tutorial4-buffer/README.md +++ b/docs/beginner/tutorial4-buffer/README.md @@ -105,7 +105,7 @@ Self { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -241,7 +241,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, render_pipeline, vertex_buffer, @@ -371,8 +371,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -389,7 +388,7 @@ Self { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -422,7 +421,7 @@ With all that you should have a garishly magenta pentagon in your window. If you use a color picker on the magenta pentagon, you'll get a hex value of #BC00BC. If you convert this to RGB values you'll get (188, 0, 188). Dividing these values by 255 to get them into the [0, 1] range we get roughly (0.737254902, 0, 0.737254902). This is not the same as we are using for our vertex colors which is (0.5, 0.0, 0.5). The reason for this has to do with color spaces. -Most monitors use a color space know as sRGB. Our swap chain is (most likely depending on what is returned from `adapter.get_swap_chain_preferred_format()`) using an sRGB texture format. The sRGB format stores colors according to their relative brightness instead of their actual brightness. The reason for this is that our eyes don't perceive light linearly. We notice more differences in darker colors than we do lighter colors. +Most monitors use a color space know as sRGB. Our swap chain is (most likely depending on what is returned from `adapter.get_preferred_format()`) using an sRGB texture format. The sRGB format stores colors according to their relative brightness instead of their actual brightness. The reason for this is that our eyes don't perceive light linearly. We notice more differences in darker colors than we do lighter colors. You get an approximation of the correct color using the following formula: `srgb_color = (rgb_color / 255) ^ 2.2`. Doing this with an RGB value of (188, 0, 188) will give us (0.511397819, 0.0, 0.511397819). A little off from our (0.5, 0.0, 0.5). While you could tweak the formula to get the desired values, you'll likely save a lot of time by using textures instead as they are stored as sRGB by default, so they don't suffer from the same color inaccuracies that vertex colors do. We'll cover textures in the next lesson. diff --git a/docs/beginner/tutorial5-textures/README.md b/docs/beginner/tutorial5-textures/README.md index aa812a5f..459364e7 100644 --- a/docs/beginner/tutorial5-textures/README.md +++ b/docs/beginner/tutorial5-textures/README.md @@ -15,7 +15,7 @@ We'll use the [image crate](https://crates.io/crates/image) to load our tree. We In `State`'s `new()` method add the following just after creating the `swap_chain`: ```rust -let swap_chain = device.create_swap_chain(&surface, &sc_desc); +surface.configure(&device, &config); // NEW! let diffuse_bytes = include_bytes!("happy-tree.png"); @@ -48,7 +48,7 @@ let diffuse_texture = device.create_texture( format: wgpu::TextureFormat::Rgba8UnormSrgb, // SAMPLED tells wgpu that we want to use this texture in shaders // COPY_DST means that we want to copy data to this texture - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, label: Some("diffuse_texture"), } ); @@ -228,8 +228,7 @@ struct State { surface: wgpu::Surface, device: wgpu::Device, queue: wgpu::Queue, - sc_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + config: wgpu::SurfaceConfiguration, size: winit::dpi::PhysicalSize, render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, @@ -249,7 +248,7 @@ impl State { surface, device, queue, - sc_desc, + config, swap_chain, size, render_pipeline, @@ -434,7 +433,7 @@ winit = "0.25" env_logger = "0.9" log = "0.4" pollster = "0.2" -wgpu = "0.9" +wgpu = "0.10" bytemuck = { version = "1.4", features = [ "derive" ] } anyhow = "1.0" // NEW! ``` @@ -484,7 +483,7 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, } ); @@ -532,7 +531,7 @@ mod texture; The texture creation code in `new()` now gets a lot simpler: ```rust -let swap_chain = device.create_swap_chain(&surface, &sc_desc); +surface.configure(&device, &config); let diffuse_bytes = include_bytes!("happy-tree.png"); // CHANGED! let diffuse_texture = texture::Texture::from_bytes(&device, &queue, diffuse_bytes, "happy-tree.png").unwrap(); // CHANGED! diff --git a/docs/beginner/tutorial6-uniforms/README.md b/docs/beginner/tutorial6-uniforms/README.md index 90e8e282..982e86c8 100644 --- a/docs/beginner/tutorial6-uniforms/README.md +++ b/docs/beginner/tutorial6-uniforms/README.md @@ -69,7 +69,7 @@ async fn new(window: &Window) -> Self { target: (0.0, 0.0, 0.0).into(), // which way is "up" up: cgmath::Vector3::unit_y(), - aspect: sc_desc.width as f32 / sc_desc.height as f32, + aspect: config.width as f32 / config.height as f32, fovy: 45.0, znear: 0.1, zfar: 100.0, diff --git a/docs/beginner/tutorial8-depth/README.md b/docs/beginner/tutorial8-depth/README.md index ddb12c66..e02d6e4b 100644 --- a/docs/beginner/tutorial8-depth/README.md +++ b/docs/beginner/tutorial8-depth/README.md @@ -26,10 +26,10 @@ Let's make a function to create the depth texture in `texture.rs`. impl Texture { pub const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float; // 1. - pub fn create_depth_texture(device: &wgpu::Device, sc_desc: &wgpu::SwapChainDescriptor, label: &str) -> Self { + pub fn create_depth_texture(device: &wgpu::Device, config: &wgpu::SurfaceConfiguration, label: &str) -> Self { let size = wgpu::Extent3d { // 2. - width: sc_desc.width, - height: sc_desc.height, + width: config.width, + height: config.height, depth_or_array_layers: 1, }; let desc = wgpu::TextureDescriptor { @@ -39,8 +39,8 @@ impl Texture { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT // 3. - | wgpu::TextureUsage::SAMPLED, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT // 3. + | wgpu::TextureUsages::SAMPLED, }; let texture = device.create_texture(&desc); @@ -66,7 +66,7 @@ impl Texture { ``` 1. We need the DEPTH_FORMAT for when we create the depth stage of the `render_pipeline` and creating the depth texture itself. -2. Our depth texture needs to be the same size as our screen if we want things to render correctly. We can use our `sc_desc` to make sure that our depth texture is the same size as our swap chain images. +2. Our depth texture needs to be the same size as our screen if we want things to render correctly. We can use our `config` to make sure that our depth texture is the same size as our swap chain images. 3. Since we are rendering to this texture, we need to add the `RENDER_ATTACHMENT` flag to it. 4. We technically don't *need* a sampler for a depth texture, but our `Texture` struct requires it, and we need one if we ever want to sample it. 5. If we do decide to render our depth texture, we need to use `CompareFunction::LessEqual`. This is due to how the `samplerShadow` and `sampler2DShadow()` interacts with the `texture()` function in GLSL. @@ -74,7 +74,7 @@ impl Texture { We create our `depth_texture` in `State::new()`. ```rust -let depth_texture = texture::Texture::create_depth_texture(&device, &sc_desc, "depth_texture"); +let depth_texture = texture::Texture::create_depth_texture(&device, &config, "depth_texture"); ``` We need to modify our `render_pipeline` to allow depth testing. @@ -129,13 +129,13 @@ We need to remember to change the `resize()` method to create a new `depth_textu fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { // ... - self.depth_texture = texture::Texture::create_depth_texture(&self.device, &self.sc_desc, "depth_texture"); + self.depth_texture = texture::Texture::create_depth_texture(&self.device, &self.config, "depth_texture"); // ... } ``` -Make sure you update the `depth_texture` *after* you update `sc_desc`. If you don't, your program will crash as the `depth_texture` will be a different size than the `swap_chain` texture. +Make sure you update the `depth_texture` *after* you update `config`. If you don't, your program will crash as the `depth_texture` will be a different size than the `swap_chain` texture. The last change we need to make is in the `render()` function. We've created the `depth_texture`, but we're not currently using it. We use it by attaching it to the `depth_stencil_attachment` of a render pass. diff --git a/docs/intermediate/tutorial10-lighting/README.md b/docs/intermediate/tutorial10-lighting/README.md index 4f248506..a67fc9a6 100644 --- a/docs/intermediate/tutorial10-lighting/README.md +++ b/docs/intermediate/tutorial10-lighting/README.md @@ -180,7 +180,7 @@ let render_pipeline = { create_render_pipeline( &device, &render_pipeline_layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc(), InstanceRaw::desc()], shader, @@ -294,7 +294,7 @@ let light_render_pipeline = { create_render_pipeline( &device, &layout, - sc_desc.format, + config.format, Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], shader, @@ -439,7 +439,7 @@ Finally we want to add Light rendering to our render passes. ```rust impl State { // ... - fn render(&mut self) -> Result<(), wgpu::SwapChainError> { + fn render(&mut self) -> Result<(), wgpu::SurfaceError> { // ... render_pass.set_vertex_buffer(1, self.instance_buffer.slice(..)); diff --git a/docs/intermediate/tutorial11-normals/README.md b/docs/intermediate/tutorial11-normals/README.md index 89acb528..d6a4633a 100644 --- a/docs/intermediate/tutorial11-normals/README.md +++ b/docs/intermediate/tutorial11-normals/README.md @@ -425,7 +425,7 @@ pub fn from_image( } else { wgpu::TextureFormat::Rgba8UnormSrgb }, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::SAMPLED | wgpu::TextureUsages::COPY_DST, }); // ... diff --git a/docs/intermediate/tutorial12-camera/README.md b/docs/intermediate/tutorial12-camera/README.md index fde04380..ade3690b 100644 --- a/docs/intermediate/tutorial12-camera/README.md +++ b/docs/intermediate/tutorial12-camera/README.md @@ -284,7 +284,7 @@ impl State { // UPDATED! let camera = camera::Camera::new((0.0, 5.0, 10.0), cgmath::Deg(-90.0), cgmath::Deg(-20.0)); - let projection = camera::Projection::new(sc_desc.width, sc_desc.height, cgmath::Deg(45.0), 0.1, 100.0); + let projection = camera::Projection::new(config.width, config.height, cgmath::Deg(45.0), 0.1, 100.0); let camera_controller = camera::CameraController::new(4.0, 0.4); // ... diff --git a/docs/news/README.md b/docs/news/README.md index 7a2571b5..f5d66d8d 100644 --- a/docs/news/README.md +++ b/docs/news/README.md @@ -27,7 +27,7 @@ The `wgpu_glyph`, and `imgui-wgpu` crates currently depend on `wgpu` 0.7, which * `CullMode` is no longer a thing, instead `PrimitiveState::cull_mode` will require an `Option` * Added `clamp_depth` and `conservative` to `PrimitiveState`. Part of this means that `DepthStencilState` no longer has a `clamp_depth` field. * `color_blend` and `alpha_blend` have been moved into the new `blend` field with accepts an `Option` -* `adapter.get_swap_chain_preferred_format()` now returns an `Option` +* `adapter.get_preferred_format()` now returns an `Option` * `wgpu::RenderPassColorAttachmentDescriptor` has been renamed `wgpu::RenderPassColorAttachement` and the `attachment` field has been renamed to `view` * `wgpu::RenderPassDepthStencialAttachmentDescriptor` also loses the `Descriptor` part of it's name. `attachment` gets renamed to `view` as well. * `wgpu::TextureCopyView` has been renamed to `wgpu::ImageCopyTexture`. This is a typedef for `wgpu::ImageCopyTextureBase` @@ -42,7 +42,7 @@ There were a lot of changes particularly to the `RenderPipelineDescriptor`. Most School is starting to ramp up, so I haven't had as much time to work on the site as I would like to. Because of that there were some issues piling up. I decided to tackle a bunch of them in one go. Here's a snapshot of what I did: -* The tutorial now handles `SwapChainError` properly +* The tutorial now handles `SurfaceError` properly * I'm now using bytemuck's derive feature on all buffer data structs. * The [instancing tutorial](../beginner/tutorial7-instancing) now uses vertex buffers instead of storage buffers. * `build.rs` now updates when individual shaders are changed, not whenever `/src` is changed. @@ -88,7 +88,7 @@ Up to this point, we created textures manually everytime. I've pulled out the te ## Fixed panics do to not specifying the correct `usage` -Wgpu has become more strict about what `BufferUsage`s and `TextureUsage`s are required when performing certain operations. For example int the [Wgpu without a window example](/intermediate/windowless/), the `texture_desc` only specified the usage to by `COPY_SRC`. This caused a crash when the `texture` was used as a render target. Adding `OUTPUT_ATTACHMENT` fixed the issue. +Wgpu has become more strict about what `BufferUsage`s and `TextureUsages`s are required when performing certain operations. For example int the [Wgpu without a window example](/intermediate/windowless/), the `texture_desc` only specified the usage to by `COPY_SRC`. This caused a crash when the `texture` was used as a render target. Adding `OUTPUT_ATTACHMENT` fixed the issue. ## Updating Winit from 0.20.0-alpha5 to 0.20 diff --git a/docs/showcase/gifs/README.md b/docs/showcase/gifs/README.md index 97e1fc81..d5573503 100644 --- a/docs/showcase/gifs/README.md +++ b/docs/showcase/gifs/README.md @@ -60,8 +60,8 @@ let rt_desc = wgpu::TextureDescriptor { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::COPY_SRC - | wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::COPY_SRC + | wgpu::TextureUsages::RENDER_ATTACHMENT, label: None, }; let render_target = framework::Texture::from_descriptor(&device, rt_desc); diff --git a/docs/showcase/imgui-demo/README.md b/docs/showcase/imgui-demo/README.md index d52f0893..3555c52e 100644 --- a/docs/showcase/imgui-demo/README.md +++ b/docs/showcase/imgui-demo/README.md @@ -53,7 +53,7 @@ Then you need to create the renderer. We need to use the swap chains `TextureFor ```rust let renderer_config = RendererConfig { - texture_format: display.sc_desc.format, + texture_format: display.config.format, ..Default::default() }; let renderer = Renderer::new(&mut imgui, &display.device, &display.queue, renderer_config); @@ -105,8 +105,8 @@ self.canvas.render( &display.queue, &mut encoder, &output.view, - display.sc_desc.width as f32, - display.sc_desc.height as f32 + display.config.width as f32, + display.config.height as f32 ); // Render the UI @@ -118,7 +118,7 @@ if self.last_cursor != ui.mouse_cursor() { let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("UI RenderPass"), color_attachments: &[wgpu::RenderPassColorAttachment { - view: &frame.view, + view: &frame, attachment: &output.view, resolve_target: None, ops: wgpu::Operations { diff --git a/docs/showcase/windowless/README.md b/docs/showcase/windowless/README.md index 1df807ec..af0485e2 100644 --- a/docs/showcase/windowless/README.md +++ b/docs/showcase/windowless/README.md @@ -22,7 +22,7 @@ let (device, queue) = adapter ## A triangle without a window -Now we've talked about not needing to see what the gpu is doing, but we do need to see the results at some point. If we look back to talking about the [swap chain](/beginner/tutorial2-swapchain/#render) we see that we use `swap_chain.get_next_texture()` to grab a texture to draw to. We'll skip that step by creating the texture ourselves. One thing to note here is we need to specify `wgpu::TextureFormat::Rgba8UnormSrgb` to `format` instead of `adapter.get_swap_chain_preferred_format(&surface)` since PNG uses RGBA, not BGRA. +Now we've talked about not needing to see what the gpu is doing, but we do need to see the results at some point. If we look back to talking about the [swap chain](/beginner/tutorial2-swapchain/#render) we see that we use `swap_chain.get_next_texture()` to grab a texture to draw to. We'll skip that step by creating the texture ourselves. One thing to note here is we need to specify `wgpu::TextureFormat::Rgba8UnormSrgb` to `format` instead of `surface.get_preferred_format(&adapter)` since PNG uses RGBA, not BGRA. ```rust let texture_size = 256u32; @@ -37,8 +37,8 @@ let texture_desc = wgpu::TextureDescriptor { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, - usage: wgpu::TextureUsage::COPY_SRC - | wgpu::TextureUsage::RENDER_ATTACHMENT + usage: wgpu::TextureUsages::COPY_SRC + | wgpu::TextureUsages::RENDER_ATTACHMENT , label: None, }; @@ -46,7 +46,7 @@ let texture = device.create_texture(&texture_desc); let texture_view = texture.create_view(&Default::default()); ``` -We're using `TextureUsage::OUTPUT_ATTACHMENT` so wgpu can render to our texture. The `TextureUsage::COPY_SRC` is so we can pull data out of the texture so we can save it to a file. +We're using `TextureUsages::OUTPUT_ATTACHMENT` so wgpu can render to our texture. The `TextureUsages::COPY_SRC` is so we can pull data out of the texture so we can save it to a file. While we can use this texture to draw our triangle, we need some way to get at the pixels inside it. Back in the [texture tutorial](/beginner/tutorial5-textures/) we used a buffer load color data from a file that we then copied into our buffer. Now we are going to do the reverse: copy data into a buffer from our texture to save into a file. We'll need a buffer big enough for our data.