From d441747c9a87658cc7b70ee3db4819ded80a3ea7 Mon Sep 17 00:00:00 2001 From: Adrian Hedqvist Date: Fri, 9 Oct 2020 00:10:58 +0200 Subject: [PATCH] tutorial-9-models --- .gitignore | 1 + Cargo.lock | 366 +++++++++-------- Cargo.toml | 12 +- build.rs | 78 ++++ readme.md | 2 +- res/cube-diffuse.jpg | Bin 0 -> 25317 bytes res/cube-normal.png | Bin 0 -> 119578 bytes res/cube.mtl | 14 + res/cube.obj | 933 +++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 153 +------ src/model.rs | 187 +++++++++ src/texture.rs | 41 +- 12 files changed, 1475 insertions(+), 312 deletions(-) create mode 100644 build.rs create mode 100644 res/cube-diffuse.jpg create mode 100644 res/cube-normal.png create mode 100644 res/cube.mtl create mode 100644 res/cube.obj create mode 100644 src/model.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..0fdeee1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +*.spv diff --git a/Cargo.lock b/Cargo.lock index c49573e..159c727 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,26 +1,20 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "addr2line" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" - [[package]] name = "adler32" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "aho-corasick" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" +dependencies = [ + "memchr", +] + [[package]] name = "andrew" version = "0.2.1" @@ -41,6 +35,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e" +[[package]] +name = "anyhow" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fd36ffbb1fb7c834eac128ea8d0e310c5aeb635548f9d58861e1308d46e71c" + [[package]] name = "approx" version = "0.3.2" @@ -67,9 +67,20 @@ dependencies = [ [[package]] name = "atom" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2" +checksum = "c9ff149ed9780025acfdb36862d35b28856bb693ceb451259a7164442f22fdc3" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi 0.3.9", +] [[package]] name = "autocfg" @@ -77,20 +88,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "backtrace" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide 0.4.1", - "object", - "rustc-demangle", -] - [[package]] name = "bitflags" version = "1.2.1" @@ -134,9 +131,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66120af515773fb005778dc07c261bd201ec8ce50bd6e7144c927753fe013381" +checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d" dependencies = [ "jobserver", ] @@ -197,7 +194,7 @@ checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ "bitflags", "block", - "core-foundation 0.9.0", + "core-foundation 0.9.1", "core-graphics-types", "foreign-types", "libc", @@ -228,11 +225,11 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b5ed8e7e76c45974e15e41bfa8d5b0483cd90191639e01d8f5f1e606299d3fb" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" dependencies = [ - "core-foundation-sys 0.8.0", + "core-foundation-sys 0.8.1", "libc", ] @@ -244,9 +241,9 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "core-foundation-sys" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a21fa21941700a3cd8fcb4091f361a6a712fac632f85d9f487cc892045d55c6" +checksum = "c0af3b5e4601de3837c9332e29e0aae47a0d46ebfa246d12b82f564bac233393" [[package]] name = "core-graphics" @@ -262,12 +259,12 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92f5d519093a4178296707dbaa3880eae85a5ef5386675f361a1cf25376e93c" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags", - "core-foundation 0.9.0", + "core-foundation 0.9.1", "foreign-types", "libc", ] @@ -368,7 +365,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", ] @@ -396,30 +393,21 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "either" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] -name = "failure" -version = "0.1.8" +name = "env_logger" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2 1.0.21", - "quote 1.0.7", - "syn", - "synstructure", + "atty", + "humantime", + "log", + "regex", + "termcolor", ] [[package]] @@ -437,6 +425,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "fs_extra" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" + [[package]] name = "fuchsia-zircon" version = "0.3.3" @@ -455,9 +449,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613" +checksum = "5d8e3078b7b2a8a671cb7a3d17b4760e4181ea243227776ba83fd043b4ca034e" dependencies = [ "futures-channel", "futures-core", @@ -470,9 +464,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" +checksum = "a7a4d35f7401e948629c9c3d6638fb9bf94e0b2121e96c3b428cc4e631f3eb74" dependencies = [ "futures-core", "futures-sink", @@ -480,15 +474,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" +checksum = "d674eaa0056896d5ada519900dbf97ead2e46a7b6621e8160d79e2f2e1e2784b" [[package]] name = "futures-executor" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314" +checksum = "cc709ca1da6f66143b8c9bec8e6260181869893714e9b5a490b169b0414144ab" dependencies = [ "futures-core", "futures-task", @@ -497,42 +491,42 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" +checksum = "5fc94b64bb39543b4e432f1790b6bf18e3ee3b74653c5449f63310e9a74b123c" [[package]] name = "futures-macro" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" +checksum = "f57ed14da4603b2554682e9f2ff3c65d7567b53188db96cb71538217fc64581b" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", ] [[package]] name = "futures-sink" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc" +checksum = "0d8764258ed64ebc5d9ed185cf86a95db5cac810269c5d20ececb32e0088abbd" [[package]] name = "futures-task" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +checksum = "4dd26820a9f3637f1302da8bceba3ff33adbe53464b54ca24d4e2d4f1db30f94" dependencies = [ "once_cell", ] [[package]] name = "futures-util" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" +checksum = "8a894a0acddba51a2d49a6f4263b1e64b8c579ece8af50fa86503d52cd1eea34" dependencies = [ "futures-channel", "futures-core", @@ -610,10 +604,11 @@ dependencies = [ [[package]] name = "gfx-backend-dx12" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfc194d9a1540073f181bae94087ffc9d84a5586b71962cd1b46b86e5a6d697" +checksum = "3173338bc209dab8b83f6c02ba6ab26e31a9428993458e8d474a964b9170d639" dependencies = [ + "arrayvec", "bitflags", "d3d12", "gfx-auxil", @@ -639,9 +634,9 @@ dependencies = [ [[package]] name = "gfx-backend-metal" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b2b1e2510c8a283beac1e680cd152edc05d138c00dfabc0e3f636e143ffd66" +checksum = "c9a5278b173f1008ad38f2bd38ca51e18a5e5d23a87195824bee468fcc390dce" dependencies = [ "arrayvec", "bitflags", @@ -665,9 +660,9 @@ dependencies = [ [[package]] name = "gfx-backend-vulkan" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84bda4200a82e1912d575801e2bb76ae19c6256359afbc0adfbbaec02fcadc6" +checksum = "70aad11a5760d216e3899beac0356560765402f30d2c1eaa79687276c8e006f7" dependencies = [ "arrayvec", "ash", @@ -721,25 +716,25 @@ dependencies = [ [[package]] name = "gif" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" +checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4" dependencies = [ "color_quant", - "lzw", + "weezl", ] [[package]] -name = "gimli" -version = "0.22.0" +name = "glob" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "hermit-abi" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" dependencies = [ "libc", ] @@ -754,10 +749,19 @@ dependencies = [ ] [[package]] -name = "image" -version = "0.23.9" +name = "humantime" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "974e194911d1f7efe3cd8a8f9db3b767e43536327e899e8bc9a12ef5711b74d2" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + +[[package]] +name = "image" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985fc06b1304d19c28d5c562ed78ef5316183f2b0053b46763a0b94862373c34" dependencies = [ "bytemuck", "byteorder", @@ -779,9 +783,12 @@ checksum = "dd01a2a73f2f399df96b22dc88ea687ef4d76226284e7531ae3c7ee1dc5cb534" [[package]] name = "instant" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" +checksum = "63312a18f7ea8760cdd0a7c5aac1a619752a246b833545e3e36d1f81f7cd9e66" +dependencies = [ + "cfg-if", +] [[package]] name = "iovec" @@ -850,9 +857,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.77" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235" +checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" [[package]] name = "libloading" @@ -948,9 +955,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" dependencies = [ "autocfg", ] @@ -978,15 +985,6 @@ dependencies = [ "adler32", ] -[[package]] -name = "miniz_oxide" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d7559a8a40d0f97e1edea3220f698f78b1c5ab67532e49f68fde3910323b722" -dependencies = [ - "adler", -] - [[package]] name = "mio" version = "0.6.22" @@ -1218,7 +1216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", ] @@ -1242,12 +1240,6 @@ dependencies = [ "cc", ] -[[package]] -name = "object" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" - [[package]] name = "once_cell" version = "1.4.1" @@ -1340,24 +1332,30 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project" -version = "0.4.23" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca4433fff2ae79342e497d9f8ee990d174071408f28f726d6d83af93e58e48aa" +checksum = "13fbdfd6bdee3dc9be46452f86af4a4072975899cf8592466668620bebfbcc17" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.23" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" +checksum = "c82fb1329f632c3552cf352d14427d57a511b1cf41db93b3a7d77906a82dcc8e" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", ] +[[package]] +name = "pin-project-lite" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e555d9e657502182ac97b539fb3dae8b79cda19e3e4f8ffb5e8de4f18df93c95" + [[package]] name = "pin-utils" version = "0.1.0" @@ -1379,7 +1377,7 @@ dependencies = [ "bitflags", "crc32fast", "deflate", - "miniz_oxide 0.3.7", + "miniz_oxide", ] [[package]] @@ -1420,13 +1418,19 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.21" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e28516df94f3dd551a587da5357459d9b36d945a7c37c3557928c1c2ff2a2c" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" dependencies = [ "unicode-xid 0.2.1", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "0.6.13" @@ -1442,7 +1446,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", ] [[package]] @@ -1518,9 +1522,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd016f0c045ad38b5251be2c9c0ab806917f82da4d36b2a327e5166adad9270" +checksum = "dcf6960dc9a5b4ee8d3e4c5787b4a112a8818e0290a42ff664ad60692fdf2032" dependencies = [ "autocfg", "crossbeam-deque", @@ -1530,9 +1534,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91739a34c4355b5434ce54c9086c5895604a9c278586d1f1aa95e04f66b525a0" +checksum = "e8c4fec834fb6e6d2dd5eece3c7b432a52f0ba887cf40e595190c4107edc08bf" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1548,10 +1552,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] -name = "rustc-demangle" -version = "0.1.16" +name = "regex" +version = "1.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" [[package]] name = "rusttype" @@ -1622,9 +1638,9 @@ dependencies = [ [[package]] name = "simba" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1585d831b5c904e42c4df7a4fcfa03e4b56a8cfa445aff0a04f4effe397ecac9" +checksum = "cdec3fb717e5504ecbef1cf4223c334a215f95323092afeae57125ec40e4995b" dependencies = [ "approx", "num-complex", @@ -1701,47 +1717,53 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" +checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "unicode-xid 0.2.1", ] [[package]] -name = "synstructure" -version = "0.12.4" +name = "termcolor" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" dependencies = [ - "proc-macro2 1.0.21", - "quote 1.0.7", - "syn", - "unicode-xid 0.2.1", + "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08" +checksum = "318234ffa22e0920fe9a40d7b8369b5f649d490980cf7aadcf1eb91594869b42" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" +checksum = "cae2447b6282786c3493999f40a9be2a6ad20cb8bd268b0a0dbf5a065535c0ab" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", ] +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + [[package]] name = "tiff" version = "0.5.0" @@ -1750,9 +1772,15 @@ checksum = "3f3b8a87c4da944c3f27e5943289171ac71a6150a79ff6bacfff06d159dfff2f" dependencies = [ "byteorder", "lzw", - "miniz_oxide 0.3.7", + "miniz_oxide", ] +[[package]] +name = "tobj" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6172100cd5b17cdd085c94f261e31101ca31886c86a2337a6687dac6d2fb3cf1" + [[package]] name = "toml" version = "0.5.6" @@ -1764,19 +1792,20 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79ca061b032d6ce30c660fded31189ca0b9922bf483cd70759f13a2d86786c" +checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" dependencies = [ "cfg-if", + "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcf46c1f1f06aeea2d6b81f3c863d0930a596c86ad1920d4e5bad6dd1d7119a" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" dependencies = [ "lazy_static", ] @@ -1847,7 +1876,7 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", "wasm-bindgen-shared", @@ -1881,7 +1910,7 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" dependencies = [ - "proc-macro2 1.0.21", + "proc-macro2 1.0.24", "quote 1.0.7", "syn", "wasm-bindgen-backend", @@ -1964,6 +1993,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "weezl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0e26e7a4d998e3d7949c69444b8b4916bac810da0d3a82ae612c89e952782f4" + [[package]] name = "wgpu" version = "0.6.0" @@ -1989,9 +2024,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317d19c2876fc26d5bc15fe986a0d2d28958337e639323fcaded23a7cf8865b9" +checksum = "8c266a580d5cc13410797edc1bd71518033792945c25bc071a8d3bbdc46710de" dependencies = [ "arrayvec", "bitflags", @@ -2018,12 +2053,17 @@ dependencies = [ name = "wgpu-tutorial" version = "0.1.0" dependencies = [ + "anyhow", "bytemuck", - "failure", + "env_logger", + "fs_extra", "futures", + "glob", "image", + "log", "nalgebra-glm", "shaderc", + "tobj", "wgpu", "winit", ] diff --git a/Cargo.toml b/Cargo.toml index bafd8e1..c4e362f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,15 @@ wgpu = "0.6.0" winit = "0.22.2" image = "0.23.9" futures = "0.3.5" -shaderc = "0.6.2" bytemuck = "1.4.1" -failure = "0.1.8" +anyhow = "1.0.33" nalgebra-glm = "0.8.0" +env_logger = "0.7.1" +log = "0.4.11" +tobj = "2.0.2" + +[build-dependencies] +shaderc = "0.6.2" +fs_extra = "1.2" +anyhow = "1.0.33" +glob = "0.3.0" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..4dc46a5 --- /dev/null +++ b/build.rs @@ -0,0 +1,78 @@ +use anyhow::*; +use fs_extra::{copy_items, dir::CopyOptions}; +use glob::glob; +use std::path::PathBuf; +use std::{ + env, + fs::{read_to_string, write}, +}; + +struct ShaderData { + src: String, + src_path: PathBuf, + spv_path: PathBuf, + kind: shaderc::ShaderKind, +} + +impl ShaderData { + pub fn load(src_path: PathBuf) -> Result { + let ext = src_path + .extension() + .context("File has no extension")? + .to_str() + .context("Extension cannot be converted to &str")?; + let kind = match ext { + "vert" => shaderc::ShaderKind::Vertex, + "frag" => shaderc::ShaderKind::Fragment, + "comp" => shaderc::ShaderKind::Compute, + _ => bail!("Unsupported shader: {}", src_path.display()), + }; + + let src = read_to_string(&src_path)?; + let spv_path = src_path.with_extension(format!("{}.spv", ext)); + + Ok(Self { + src, + src_path, + spv_path, + kind, + }) + } +} + +fn main() -> Result<()> { + println!("cargo:rerun-if-changed=src/*"); + + let mut shader_paths = [ + glob("./src/**/*.vert")?, + glob("./src/**/*.frag")?, + glob("./src/**/*.comp")?, + ]; + + let shaders: Result> = shader_paths + .iter_mut() + .flatten() + .map(|glob_result| ShaderData::load(glob_result?)) + .collect(); + + let mut compiler = shaderc::Compiler::new().context("Unable to create shader compiler")?; + + for shader in shaders? { + let compiled = compiler.compile_into_spirv( + &shader.src, + shader.kind, + &shader.src_path.to_str().unwrap(), + "main", + None, + )?; + write(shader.spv_path, compiled.as_binary_u8())?; + } + + println!("cargo:rerun-if-changed=res/*"); + let out_dir = env::var("OUT_DIR")?; + let mut copy_options = CopyOptions::new(); + copy_options.overwrite = true; + copy_items(&vec!["res/"], out_dir, ©_options)?; + + Ok(()) +} diff --git a/readme.md b/readme.md index cae826f..d93c547 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,3 @@ # doing the wgpu-rs tutorial -[current chapter](https://sotrh.github.io/learn-wgpu/beginner/tutorial9-models/#accessing-files-in-the-res-folder) \ No newline at end of file +[current chapter](https://sotrh.github.io/learn-wgpu/intermediate/tutorial10-lighting/#ray-path-tracing) diff --git a/res/cube-diffuse.jpg b/res/cube-diffuse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c89b31d5fc05dccd2800fc129c11348015729b10 GIT binary patch literal 25317 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

-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, instance_buffer: wgpu::Buffer, @@ -303,12 +283,6 @@ impl State { let swap_chain = device.create_swap_chain(&surface, &sc_desc); - // Load image - let diffuse_bytes = include_bytes!("snubben.png"); - let (diffuse_texture, command) = - texture::Texture::from_bytes(&device, diffuse_bytes, "diffuse_texture").unwrap(); - queue.submit(Some(command)); - let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { label: Some("texture_bind_group_layout"), @@ -332,21 +306,6 @@ impl State { ], }); - let diffuse_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - label: Some("diffuse_bind_group"), - layout: &texture_bind_group_layout, - entries: &[ - wgpu::BindGroupEntry { - binding: 0, - resource: wgpu::BindingResource::TextureView(&diffuse_texture.view), - }, - wgpu::BindGroupEntry { - binding: 1, - resource: wgpu::BindingResource::Sampler(&diffuse_texture.sampler), - }, - ], - }); - // Camera let camera = Camera { eye: glm::vec3(0.0, 1.0, 2.0), @@ -360,28 +319,21 @@ impl State { let camera_controller = CameraController::new(0.2); - // Setup buffers - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vertex_buffer"), - contents: bytemuck::cast_slice(&VERTICES), - usage: wgpu::BufferUsage::VERTEX, - }); + let res_dir = std::path::Path::new(env!("OUT_DIR")).join("res"); + let obj_model = Model::load( + &device, &queue, &texture_bind_group_layout, + res_dir.join("cube.obj") + ).unwrap(); - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("index_buffer"), - contents: bytemuck::cast_slice(&INDICES), - usage: wgpu::BufferUsage::INDEX, - }); - let num_indices = INDICES.len() as u32; let instance_displacement = glm::vec3( - NUM_INSTANCES_PER_ROW as f32 * 0.5, + 3.0 * NUM_INSTANCES_PER_ROW as f32 / 2.0, 0.0, - NUM_INSTANCES_PER_ROW as f32 * 0.5, + 3.0 * NUM_INSTANCES_PER_ROW as f32 / 2.0, ); let instances: Vec = (0..NUM_INSTANCES_PER_ROW) .flat_map(|z| { (0..NUM_INSTANCES_PER_ROW).map(move |x| { - let position = glm::vec3(x as f32, 0.0, z as f32) - instance_displacement; + let position = glm::vec3(x as f32 * 3.0, 0.0, z as f32 * 3.0) - instance_displacement; let rotation = if glm::zero::() == position { glm::quat_angle_axis(0.0, &glm::vec3(0.0, 0.0, 1.0)) } else { @@ -456,35 +408,9 @@ impl State { ], }); - // Compile & load shaders - let vs_src = include_str!("shader.vert"); - let fs_src = include_str!("shader.frag"); - - let mut compiler = shaderc::Compiler::new().unwrap(); - let vs_spriv = compiler - .compile_into_spirv( - vs_src, - shaderc::ShaderKind::Vertex, - "shader.vert", - "main", - None, - ) - .unwrap(); - let fs_spriv = compiler - .compile_into_spirv( - fs_src, - shaderc::ShaderKind::Fragment, - "shader.frag", - "main", - None, - ) - .unwrap(); - - let vs_data = wgpu::util::make_spirv(vs_spriv.as_binary_u8()); - let fs_data = wgpu::util::make_spirv(fs_spriv.as_binary_u8()); - - let vs_module = device.create_shader_module(vs_data); - let fs_module = device.create_shader_module(fs_data); + // Load shaders + let vs_module = device.create_shader_module(wgpu::include_spirv!("shader.vert.spv")); + let fs_module = device.create_shader_module(wgpu::include_spirv!("shader.frag.spv")); // Setup render pipeline let render_pipeline_layout = @@ -527,8 +453,8 @@ impl State { stencil: wgpu::StencilStateDescriptor::default(), }), vertex_state: wgpu::VertexStateDescriptor { - index_format: wgpu::IndexFormat::Uint16, - vertex_buffers: &[Vertex::desc()], + index_format: wgpu::IndexFormat::Uint32, + vertex_buffers: &[model::ModelVertex::desc()], }, sample_count: 1, sample_mask: !0, @@ -543,17 +469,13 @@ impl State { queue, sc_desc, swap_chain, - diffuse_texture, - diffuse_bind_group, camera, camera_controller, depth_texture, uniforms, uniform_buffer, uniform_bind_group, - vertex_buffer, - index_buffer, - num_indices, + obj_model, instances, instance_buffer, render_pipeline, @@ -641,46 +563,11 @@ impl State { }); render_pass.set_pipeline(&self.render_pipeline); - render_pass.set_bind_group(0, &self.diffuse_bind_group, &[]); - render_pass.set_bind_group(1, &self.uniform_bind_group, &[]); - render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(0..)); - render_pass.set_index_buffer(self.index_buffer.slice(0..)); - render_pass.draw_indexed(0..self.num_indices, 0, 0..self.instances.len() as _); + + render_pass.draw_model_instanced(&self.obj_model, 0..self.instances.len() as u32, &self.uniform_bind_group); drop(render_pass); self.queue.submit(Some(encoder.finish())); } } - -#[repr(C)] -#[derive(Copy, Clone, Debug)] -struct Vertex { - position: [f32; 3], - tex_coords: [f32; 2], -} - -unsafe impl bytemuck::Pod for Vertex {} -unsafe impl bytemuck::Zeroable for Vertex {} - -impl Vertex { - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - use std::mem; - wgpu::VertexBufferDescriptor { - stride: mem::size_of::() as wgpu::BufferAddress, - step_mode: wgpu::InputStepMode::Vertex, - attributes: &[ - wgpu::VertexAttributeDescriptor { - offset: 0, - format: wgpu::VertexFormat::Float3, - shader_location: 0, - }, - wgpu::VertexAttributeDescriptor { - offset: mem::size_of::<[f32; 3]>() as wgpu::BufferAddress, - format: wgpu::VertexFormat::Float2, - shader_location: 1, - }, - ], - } - } -} diff --git a/src/model.rs b/src/model.rs new file mode 100644 index 0000000..12946c3 --- /dev/null +++ b/src/model.rs @@ -0,0 +1,187 @@ +use std::{ops::Range, path::Path}; + +use crate::texture; +use anyhow::*; +use wgpu::{self, util::DeviceExt}; + +pub trait Vertex { + fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a>; +} + +#[repr(C)] +#[derive(Copy, Clone, Debug)] +pub struct ModelVertex { + position: [f32; 3], + tex_coords: [f32; 2], + normal: [f32; 3], +} + +impl Vertex for ModelVertex { + fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { + use std::mem; + wgpu::VertexBufferDescriptor { + stride: mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::InputStepMode::Vertex, + attributes: &[ + wgpu::VertexAttributeDescriptor { + offset: 0, + shader_location: 0, + format: wgpu::VertexFormat::Float3, + }, + wgpu::VertexAttributeDescriptor { + offset: mem::size_of::<[f32; 3]>() as wgpu::BufferAddress, + shader_location: 1, + format: wgpu::VertexFormat::Float2, + }, + wgpu::VertexAttributeDescriptor { + offset: mem::size_of::<[f32; 5]>() as wgpu::BufferAddress, + shader_location: 2, + format: wgpu::VertexFormat::Float3, + }, + ], + } + } +} + +unsafe impl bytemuck::Pod for ModelVertex {} +unsafe impl bytemuck::Zeroable for ModelVertex {} + +pub struct Material { + pub name: String, + pub diffuse_texture: texture::Texture, + pub bind_group: wgpu::BindGroup, +} + +pub struct Mesh { + pub name: String, + pub vertex_buffer: wgpu::Buffer, + pub index_buffer: wgpu::Buffer, + pub num_elements: u32, + pub material: usize, +} + +pub struct Model { + pub meshes: Vec, + pub materials: Vec, +} + +impl Model { + pub fn load>( + device: &wgpu::Device, + queue: &wgpu::Queue, + layout: &wgpu::BindGroupLayout, + path: P, + ) -> Result { + let (obj_models, obj_materials) = tobj::load_obj(path.as_ref(), true)?; + + let containing_folder = path.as_ref().parent() + .context("Directory has no parent")?; + + let materials: Result> = obj_materials.into_iter().map(|mat| { + let diffuse_texture = texture::Texture::load(device, queue, containing_folder.join(mat.diffuse_texture))?; + + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + label: None, + layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(&diffuse_texture.view), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::Sampler(&diffuse_texture.sampler), + } + ], + }); + + Ok(Material { + name: mat.name, + diffuse_texture, + bind_group + }) + }).collect(); + + let meshes: Result> = obj_models.into_iter().map(|m| { + let mut vertices = Vec::with_capacity(m.mesh.positions.len() / 3); + for i in 0..m.mesh.positions.len() / 3 { + vertices.push(ModelVertex { + position: [ + m.mesh.positions[i * 3], + m.mesh.positions[i * 3 + 1], + m.mesh.positions[i * 3 + 2], + ], + tex_coords: [ + m.mesh.texcoords[i * 2], + m.mesh.texcoords[i * 2 + 1], + ], + normal: [ + m.mesh.normals[i * 3], + m.mesh.normals[i * 3 + 1], + m.mesh.normals[i * 3 + 2], + ], + }); + } + + let vertex_buffer = device.create_buffer_init( + &wgpu::util::BufferInitDescriptor { + label: Some(&format!("{:?} Vertex Buffer", path.as_ref())), + contents: bytemuck::cast_slice(&vertices), + usage: wgpu::BufferUsage::VERTEX, + } + ); + let index_buffer = device.create_buffer_init( + &wgpu::util::BufferInitDescriptor { + label: Some(&format!("{:?} Index Buffer", path.as_ref())), + contents: bytemuck::cast_slice(&m.mesh.indices), + usage: wgpu::BufferUsage::INDEX, + } + ); + + Ok(Mesh { + name: m.name, + vertex_buffer, + index_buffer, + num_elements: m.mesh.indices.len() as u32, + material: m.mesh.material_id.unwrap_or(0), + }) + }).collect(); + + Ok(Self { + meshes: meshes?, + materials: materials?, + }) + } +} + +pub trait DrawModel<'a, 'b> where 'b: 'a { + fn draw_model(&mut self, model: &'b Model, uniforms: &'b wgpu::BindGroup); + fn draw_model_instanced(&mut self, model: &'b Model, instances: Range, uniforms: &'b wgpu::BindGroup); + fn draw_mesh(&mut self, mesh: &'b Mesh, material: &'b Material, uniforms: &'b wgpu::BindGroup); + fn draw_mesh_instanced(&mut self, mesh: &'b Mesh, material: &'b Material, uniforms: &'b wgpu::BindGroup, instances: Range); +} + +impl<'a, 'b> DrawModel<'a, 'b> for wgpu::RenderPass<'a> where 'b: 'a { + fn draw_mesh(&mut self, mesh: &'b Mesh, material: &'b Material, uniforms: &'b wgpu::BindGroup) { + self.draw_mesh_instanced(mesh, material, uniforms, 0..1) + } + + fn draw_mesh_instanced(&mut self, mesh: &'b Mesh, material: &'b Material, uniforms: &'b wgpu::BindGroup, instances: Range) { + self.set_vertex_buffer(0, mesh.vertex_buffer.slice(..)); + self.set_index_buffer(mesh.index_buffer.slice(..)); + self.set_bind_group(0, &material.bind_group, &[]); + self.set_bind_group(1, uniforms, &[]); + self.draw_indexed(0..mesh.num_elements, 0, instances); + } + + fn draw_model(&mut self, model: &'b Model, uniforms: &'b wgpu::BindGroup) { + self.draw_model_instanced(model, 0..1, uniforms) + } + + fn draw_model_instanced(&mut self, model: &'b Model, instances: Range, uniforms: &'b wgpu::BindGroup) { + for mesh in &model.meshes { + let material = &model.materials[mesh.material]; + self.draw_mesh_instanced(mesh, material, uniforms, instances.clone()); + } + } +} diff --git a/src/texture.rs b/src/texture.rs index 6fc4c9f..cb1c21a 100644 --- a/src/texture.rs +++ b/src/texture.rs @@ -1,4 +1,6 @@ +use anyhow::*; use image::GenericImageView; +use std::path::Path; use wgpu::util::DeviceExt; pub struct Texture { @@ -10,22 +12,23 @@ pub struct Texture { impl Texture { pub fn from_bytes( device: &wgpu::Device, + queue: &wgpu::Queue, bytes: &[u8], label: &str, - ) -> Result<(Self, wgpu::CommandBuffer), failure::Error> { + ) -> Result { let img = image::load_from_memory(bytes)?; - Self::from_image(device, &img, Some(label)) + Self::from_image(device, queue, &img, Some(label)) } pub fn from_image( device: &wgpu::Device, + queue: &wgpu::Queue, img: &image::DynamicImage, label: Option<&str>, - ) -> Result<(Self, wgpu::CommandBuffer), failure::Error> { - let rgba = img.as_rgba8().unwrap(); + ) -> Result { + let rgba = img.to_rgba(); let (width, height) = img.dimensions(); - let size = wgpu::Extent3d { width, height, @@ -87,14 +90,13 @@ impl Texture { anisotropy_clamp: None, }); - Ok(( - Texture { - texture, - view, - sampler, - }, - command, - )) + queue.submit(Some(command)); + + Ok(Texture { + texture, + view, + sampler, + }) } pub const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float; @@ -140,4 +142,17 @@ impl Texture { sampler, } } + + pub fn load>( + device: &wgpu::Device, + queue: &wgpu::Queue, + path: P, + ) -> Result { + // Needed to appease the borrow checker + let path_copy = path.as_ref().to_path_buf(); + let label = path_copy.to_str(); + + let img = image::open(path)?; + Self::from_image(device, queue, &img, label) + } }