Refactor examples

This commit is contained in:
maik klein 2016-12-25 06:21:41 +01:00
parent 4669285d1c
commit 40576acb95
3 changed files with 968 additions and 442 deletions

View file

@ -4,8 +4,14 @@ version = "0.1.0"
dependencies = [ dependencies = [
"ash 0.2.0", "ash 0.2.0",
"glfw 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "glfw 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"winit 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "android_glue"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "ash" name = "ash"
version = "0.2.0" version = "0.2.0"
@ -19,6 +25,25 @@ name = "bitflags"
version = "0.7.0" version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "block"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "byteorder"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "cgl"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gleam 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "cmake" name = "cmake"
version = "0.1.20" version = "0.1.20"
@ -27,6 +52,67 @@ dependencies = [
"gcc 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "cocoa"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-graphics"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "dlib"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libloading 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "dtoa"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "dwmapi-sys"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "enum_primitive" name = "enum_primitive"
version = "0.1.0" version = "0.1.0"
@ -35,11 +121,48 @@ dependencies = [
"num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "fs2"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "gcc" name = "gcc"
version = "0.3.40" version = "0.3.40"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "gdi32-sys"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "gl_generator"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"xml-rs 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "gleam"
version = "0.2.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "glfw" name = "glfw"
version = "0.9.1" version = "0.9.1"
@ -62,6 +185,25 @@ dependencies = [
"cmake 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", "cmake 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "itoa"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "kernel32-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "khronos_api"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "0.2.2" version = "0.2.2"
@ -72,11 +214,41 @@ name = "libc"
version = "0.2.18" version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libloading"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"target_build_utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "log" name = "log"
version = "0.3.6" version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "memmap"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fs2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "nom" name = "nom"
version = "1.2.4" version = "1.2.4"
@ -148,6 +320,50 @@ name = "num-traits"
version = "0.1.36" version = "0.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "objc"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf_codegen"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_generator 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf_generator"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf_shared"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "pkg-config"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.3.15" version = "0.3.15"
@ -161,6 +377,19 @@ name = "rustc-serialize"
version = "0.3.22" version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rustc_version"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "semver"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "semver" name = "semver"
version = "0.2.3" version = "0.2.3"
@ -169,6 +398,22 @@ dependencies = [
"nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "serde"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "serde_json"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "shared_library" name = "shared_library"
version = "0.1.5" version = "0.1.5"
@ -178,16 +423,181 @@ dependencies = [
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "shell32-sys"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "target_build_utils"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_codegen 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tempfile"
version = "2.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "user32-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wayland-client"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-scanner 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-sys 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wayland-kbd"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"dlib 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"memmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-client 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wayland-scanner"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"xml-rs 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wayland-sys"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"dlib 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wayland-window"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-client 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-build"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winit"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"android_glue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cgl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"cocoa 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"user32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-client 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-kbd 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"wayland-window 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"x11-dl 2.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "x11-dl"
version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "xml-rs"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[metadata] [metadata]
"checksum android_glue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e2b80445d331077679dfc6f3014f3e9ab7083e588423d35041d3fc017198189"
"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
"checksum cgl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8bdd78cca65a739cb5475dbf6b6bbb49373e327f4a6f2b499c0f98632df38c10"
"checksum cmake 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "a3a6805df695087e7c1bcd9a82e03ad6fb864c8e67ac41b1348229ce5b7f0407" "checksum cmake 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "a3a6805df695087e7c1bcd9a82e03ad6fb864c8e67ac41b1348229ce5b7f0407"
"checksum cocoa 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1be5fd98bb7e8ef0eea233a4984f4e85ecdcfa002a90b8b12b7a20faf44dc1"
"checksum core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "20a6d0448d3a99d977ae4a2aa5a98d886a923e863e81ad9ff814645b6feb3bbd"
"checksum core-foundation-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "05eed248dc504a5391c63794fe4fb64f46f071280afaa1b73308f3c0ce4574c5"
"checksum core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "66e998abb8823fecd2a8a7205429b17a340d447d8c69b3bce86846dcdea3e33b"
"checksum dlib 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "148bce4ce1c36c4509f29cb54e62c2bd265551a9b00b38070fad551a851866ec"
"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d"
"checksum dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07c4c7cc7b396419bc0a4d90371d0cee16cb5053b53647d287c0b728000c41fe"
"checksum enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f79eff5be92a4d7d5bddf7daa7d650717ea71628634efe6ca7bcda85b2183c23" "checksum enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f79eff5be92a4d7d5bddf7daa7d650717ea71628634efe6ca7bcda85b2183c23"
"checksum fs2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bcd414e5a1a979b931bb92f41b7a54106d3f6d2e6c253e9ce943b7cd468251ef"
"checksum gcc 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "872db9e59486ef2b14f8e8c10e9ef02de2bccef6363d7f34835dedb386b3d950" "checksum gcc 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "872db9e59486ef2b14f8e8c10e9ef02de2bccef6363d7f34835dedb386b3d950"
"checksum gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "65256ec4dc2592e6f05bfc1ca3b956a4e0698aa90b1dff1f5687d55a5a3fd59a"
"checksum gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1d8edc81c5ae84605a62f5dac661a2313003b26d59839f81d47d46cf0f16a55"
"checksum gleam 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b83402229bde9d923f0b92811be017f9df5946ee86f8647367b1e02bcf5c293"
"checksum glfw 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b14e68c4ccefdf293ecb65390a5761971b83fcfc54d153a5b73d438327633965" "checksum glfw 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b14e68c4ccefdf293ecb65390a5761971b83fcfc54d153a5b73d438327633965"
"checksum glfw-sys 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0031461ad52978b865d3e9bafa2be2825052ddec12c56bbf2da2cf1c0274d6ea" "checksum glfw-sys 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0031461ad52978b865d3e9bafa2be2825052ddec12c56bbf2da2cf1c0274d6ea"
"checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "09c9d3760673c427d46f91a0350f0a84a52e6bc5a84adf26dc610b6c52436630"
"checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b" "checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b"
"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" "checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
"checksum libloading 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "84816a8c6ed8163dfe0dbdd2b09d35c6723270ea77a4c7afa4bedf038a36cb99"
"checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054" "checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054"
"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
"checksum memmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "69253224aa10070855ea8fe9dbe94a03fc2b1d7930bb340c9e586a7513716fea"
"checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
"checksum num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "bde7c03b09e7c6a301ee81f6ddf66d7a28ec305699e3d3b056d2fc56470e3120" "checksum num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "bde7c03b09e7c6a301ee81f6ddf66d7a28ec305699e3d3b056d2fc56470e3120"
"checksum num-bigint 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "88b14378471f7c2adc5262f05b4701ef53e8da376453a8d8fee48e51db745e49" "checksum num-bigint 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "88b14378471f7c2adc5262f05b4701ef53e8da376453a8d8fee48e51db745e49"
@ -196,7 +606,31 @@ dependencies = [
"checksum num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "287a1c9969a847055e1122ec0ea7a5c5d6f72aad97934e131c83d5c08ab4e45c" "checksum num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "287a1c9969a847055e1122ec0ea7a5c5d6f72aad97934e131c83d5c08ab4e45c"
"checksum num-rational 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "54ff603b8334a72fbb27fe66948aac0abaaa40231b3cecd189e76162f6f38aaf" "checksum num-rational 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "54ff603b8334a72fbb27fe66948aac0abaaa40231b3cecd189e76162f6f38aaf"
"checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" "checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c"
"checksum objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "877f30f37acef6749b1841cceab289707f211aecfc756553cd63976190e6cc2e"
"checksum phf 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "0c6afb2057bb5f846a7b75703f90bc1cef4970c35209f712925db7768e999202"
"checksum phf_codegen 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "6b63f121bf9a128f2172a65d8313a8e0e79d63874eeb4b4b7d82e6dda6b62f7c"
"checksum phf_generator 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "50ffbd7970f75afa083c5dd7b6830c97b72b81579c7a92d8134ef2ee6c0c7eb0"
"checksum phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "286385a0e50d4147bce15b2c19f0cf84c395b0e061aaf840898a7bf664c2cfb7"
"checksum pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8cee804ecc7eaf201a4a207241472cc870e825206f6c031e3ee2a72fa425f2fa"
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d" "checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
"checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b" "checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b"
"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
"checksum semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2d5b7638a1f03815d94e88cb3b3c08e87f0db4d683ef499d1836aaf70a45623f" "checksum semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2d5b7638a1f03815d94e88cb3b3c08e87f0db4d683ef499d1836aaf70a45623f"
"checksum serde 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)" = "793aa8d4a777e46a68bbf88998cd957e638427ba5bfb0de22c92ff277b65bd21"
"checksum serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3f7d3c184d35801fb8b32b46a7d58d57dbcc150b0eb2b46a1eb79645e8ecfd5b"
"checksum shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04126b6fcfd2710fb5b6d18f4207b6c535f2850a7e1a43bcd526d44f30a79a" "checksum shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04126b6fcfd2710fb5b6d18f4207b6c535f2850a7e1a43bcd526d44f30a79a"
"checksum shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72f20b8f3c060374edb8046591ba28f62448c369ccbdc7b02075103fb3a9e38d"
"checksum target_build_utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "54c550e226618cd35334b75e92bfa5437c61474bdb75c38bf330ab5a8037b77c"
"checksum tempfile 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9270837a93bad1b1dac18fe67e786b3c960513af86231f6f4f57fddd594ff0c8"
"checksum user32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6717129de5ac253f5642fc78a51d0c7de6f9f53d617fc94e9bae7f6e71cf5504"
"checksum wayland-client 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8c3e3edc131b755a1c6ab9873ce27557f5c5f075959597cd201bc00019555c9e"
"checksum wayland-kbd 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7707deadab966d6ea58651f4150add1fc442058a9598c3da11f0ce27c99f440f"
"checksum wayland-scanner 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c7459efa4b7bab8f34657ce6167ff470871cc7932d75cfc8db7e2ef99f81397b"
"checksum wayland-sys 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bb879ab3916b7bbacda1258df0bc78eaa12b483f377a73ecc40b9f0b24f15465"
"checksum wayland-window 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a3046a8f3e7d24fba7ec83ffcb0e03f4825041ca270c78a63f2ce1049dc20e52"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
"checksum winit 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "205495562dee0b698398cf7a13849c895473e1eb227af550d57b37ab1b6524b6"
"checksum x11-dl 2.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4e4c7f0a7fb861a1bde4aa23bbda9509bda6b87de4d47c322f86e4c88241ebdd"
"checksum xml-rs 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b15eed12692bd59d15e98ee7f8dc8408465b992d8ddb4d1672c24865132ec7"

View file

@ -5,4 +5,5 @@ authors = ["maik klein <maikklein@googlemail.com>"]
[dependencies] [dependencies]
glfw = "0.9.1" glfw = "0.9.1"
winit = "0.5.6"
ash = { version = "*", path = "../../"} ash = { version = "*", path = "../../"}

View file

@ -1,11 +1,10 @@
#![allow(dead_code)] #![allow(dead_code)]
#[macro_use] #[macro_use]
extern crate ash; extern crate ash;
extern crate glfw; extern crate winit;
use ash::vk; use ash::vk;
use std::default::Default; use std::default::Default;
use glfw::*;
use ash::entry::Entry; use ash::entry::Entry;
use ash::instance::Instance; use ash::instance::Instance;
use ash::extensions::{Swapchain, XlibSurface, Surface, DebugReport}; use ash::extensions::{Swapchain, XlibSurface, Surface, DebugReport};
@ -16,6 +15,7 @@ use std::mem;
use std::path::Path; use std::path::Path;
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
use winit::os::unix::WindowExt;
// Simple offset_of macro akin to C++ offsetof // Simple offset_of macro akin to C++ offsetof
macro_rules! offset_of{ macro_rules! offset_of{
@ -31,10 +31,10 @@ macro_rules! offset_of{
#[cfg(all(unix, not(target_os = "android")))] #[cfg(all(unix, not(target_os = "android")))]
fn create_surface(instance: &Instance, fn create_surface(instance: &Instance,
entry: &Entry, entry: &Entry,
window: &Window) window: &winit::Window)
-> Result<vk::SurfaceKHR, vk::Result> { -> Result<vk::SurfaceKHR, vk::Result> {
let x11_display = window.glfw.get_x11_display(); let x11_display = window.get_xlib_display().unwrap();
let x11_window = window.get_x11_window(); let x11_window = window.get_xlib_window().unwrap();
let x11_create_info = vk::XlibSurfaceCreateInfoKHR { let x11_create_info = vk::XlibSurfaceCreateInfoKHR {
s_type: vk::StructureType::XlibSurfaceCreateInfoKhr, s_type: vk::StructureType::XlibSurfaceCreateInfoKhr,
p_next: ptr::null(), p_next: ptr::null(),
@ -73,12 +73,6 @@ unsafe extern "system" fn vulkan_debug_callback(flags: vk::DebugReportFlagsEXT,
println!("{:?}", CStr::from_ptr(p_message)); println!("{:?}", CStr::from_ptr(p_message));
1 1
} }
fn handle_window_event(window: &mut glfw::Window, event: glfw::WindowEvent) {
match event {
glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) => window.set_should_close(true),
_ => {}
}
}
pub fn find_memorytype_index(memory_req: &vk::MemoryRequirements, pub fn find_memorytype_index(memory_req: &vk::MemoryRequirements,
memory_prop: &vk::PhysicalDeviceMemoryProperties, memory_prop: &vk::PhysicalDeviceMemoryProperties,
@ -99,22 +93,57 @@ struct Vertex {
pos: [f32; 4], pos: [f32; 4],
color: [f32; 4], color: [f32; 4],
} }
fn main() { fn resize_callback(width: u32, height: u32) {
println!("Window resized to {}x{}", width, height);
}
pub struct ExampleBase {
pub entry: Entry,
pub instance: Instance,
pub device: Device,
pub surface_loader: Surface,
pub swapchain_loader: Swapchain,
pub window: winit::Window,
pub pdevice: vk::PhysicalDevice,
pub device_memory_properties: vk::PhysicalDeviceMemoryProperties,
pub queue_family_index: u32,
pub present_queue: vk::Queue,
pub surface_format: vk::SurfaceFormatKHR,
pub surface_resolution: vk::Extent2D,
pub swapchain: vk::SwapchainKHR,
pub present_images: Vec<vk::Image>,
pub present_image_views: Vec<vk::ImageView>,
pub pool: vk::CommandPool,
pub draw_command_buffer: vk::CommandBuffer,
pub setup_command_buffer: vk::CommandBuffer,
pub depth_image: vk::Image,
pub depth_image_view: vk::ImageView,
}
impl ExampleBase {
pub fn render_loop<F: Fn()>(&self, f: F) {
'render: loop {
for event in self.window.poll_events() {
match event {
winit::Event::KeyboardInput(_, _, Some(winit::VirtualKeyCode::Escape)) |
winit::Event::Closed => break 'render,
_ => (),
}
}
f();
}
}
pub fn new(window_width: u32, window_height: u32) -> Self {
unsafe { unsafe {
let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap(); let window = winit::WindowBuilder::new()
.with_title("A fantastic window!")
let window_width = 1920; .with_dimensions(window_width, window_height)
let window_height = 1080; .with_window_resize_callback(resize_callback)
.build()
let (mut window, events) = glfw.create_window(window_width, .unwrap();
window_height,
"Hello this is window",
glfw::WindowMode::Windowed)
.expect("Failed to create GLFW window.");
window.set_key_polling(true);
window.make_current();
glfw.set_swap_interval(0);
let entry = Entry::load_vulkan().unwrap(); let entry = Entry::load_vulkan().unwrap();
let instance_ext_props = entry.enumerate_instance_extension_properties().unwrap(); let instance_ext_props = entry.enumerate_instance_extension_properties().unwrap();
let app_name = CString::new("VulkanTriangle").unwrap(); let app_name = CString::new("VulkanTriangle").unwrap();
@ -191,7 +220,8 @@ fn main() {
let device_extension_names_raw: Vec<*const i8> = device_extension_names.iter() let device_extension_names_raw: Vec<*const i8> = device_extension_names.iter()
.map(|raw_name| raw_name.as_ptr()) .map(|raw_name| raw_name.as_ptr())
.collect(); .collect();
let features = vk::PhysicalDeviceFeatures { shader_clip_distance: 1, ..Default::default() }; let features =
vk::PhysicalDeviceFeatures { shader_clip_distance: 1, ..Default::default() };
let priorities = [1.0]; let priorities = [1.0];
let queue_info = vk::DeviceQueueCreateInfo { let queue_info = vk::DeviceQueueCreateInfo {
s_type: vk::StructureType::DeviceQueueCreateInfo, s_type: vk::StructureType::DeviceQueueCreateInfo,
@ -235,12 +265,13 @@ fn main() {
.nth(0) .nth(0)
.expect("Unable to find suitable surface format."); .expect("Unable to find suitable surface format.");
let surface_capabilities = let surface_capabilities =
surface_loader.get_physical_device_surface_capabilities_khr(pdevice, surface).unwrap(); surface_loader.get_physical_device_surface_capabilities_khr(pdevice, surface)
.unwrap();
let desired_image_count = surface_capabilities.min_image_count + 1; let desired_image_count = surface_capabilities.min_image_count + 1;
assert!(surface_capabilities.min_image_count <= desired_image_count && assert!(surface_capabilities.min_image_count <= desired_image_count &&
surface_capabilities.max_image_count >= desired_image_count, surface_capabilities.max_image_count >= desired_image_count,
"Image count err"); "Image count err");
let surface_resoultion = match surface_capabilities.current_extent.width { let surface_resolution = match surface_capabilities.current_extent.width {
std::u32::MAX => { std::u32::MAX => {
vk::Extent2D { vk::Extent2D {
width: window_width, width: window_width,
@ -273,7 +304,7 @@ fn main() {
min_image_count: desired_image_count, min_image_count: desired_image_count,
image_color_space: surface_format.color_space, image_color_space: surface_format.color_space,
image_format: surface_format.format, image_format: surface_format.format,
image_extent: surface_resoultion.clone(), image_extent: surface_resolution.clone(),
image_usage: vk::IMAGE_USAGE_COLOR_ATTACHMENT_BIT, image_usage: vk::IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
image_sharing_mode: vk::SharingMode::Exclusive, image_sharing_mode: vk::SharingMode::Exclusive,
pre_transform: pre_transform, pre_transform: pre_transform,
@ -300,6 +331,13 @@ fn main() {
command_pool: pool, command_pool: pool,
level: vk::CommandBufferLevel::Primary, level: vk::CommandBufferLevel::Primary,
}; };
let command_buffer_allocate_info = vk::CommandBufferAllocateInfo {
s_type: vk::StructureType::CommandBufferAllocateInfo,
p_next: ptr::null(),
command_buffer_count: 2,
command_pool: pool,
level: vk::CommandBufferLevel::Primary,
};
let command_buffers = device.allocate_command_buffers(&command_buffer_allocate_info) let command_buffers = device.allocate_command_buffers(&command_buffer_allocate_info)
.unwrap(); .unwrap();
let setup_command_buffer = command_buffers[0]; let setup_command_buffer = command_buffers[0];
@ -340,8 +378,8 @@ fn main() {
image_type: vk::ImageType::Type2d, image_type: vk::ImageType::Type2d,
format: vk::Format::D16Unorm, format: vk::Format::D16Unorm,
extent: vk::Extent3D { extent: vk::Extent3D {
width: surface_resoultion.width, width: surface_resolution.width,
height: surface_resoultion.height, height: surface_resolution.height,
depth: 1, depth: 1,
}, },
mip_levels: 1, mip_levels: 1,
@ -356,7 +394,8 @@ fn main() {
}; };
let depth_image = device.create_image(&depth_image_create_info).unwrap(); let depth_image = device.create_image(&depth_image_create_info).unwrap();
let depth_image_memory_req = device.get_image_memory_requirements(depth_image); let depth_image_memory_req = device.get_image_memory_requirements(depth_image);
let depth_image_memory_index = find_memorytype_index(&depth_image_memory_req, let depth_image_memory_index =
find_memorytype_index(&depth_image_memory_req,
&device_memory_properties, &device_memory_properties,
vk::MEMORY_PROPERTY_DEVICE_LOCAL_BIT) vk::MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
.expect("Unable to find suitable memory index for depth image."); .expect("Unable to find suitable memory index for depth image.");
@ -447,9 +486,48 @@ fn main() {
image: depth_image, image: depth_image,
}; };
let depth_image_view = device.create_image_view(&depth_image_view_info).unwrap(); let depth_image_view = device.create_image_view(&depth_image_view_info).unwrap();
ExampleBase {
entry: entry,
instance: instance,
device: device,
queue_family_index: queue_family_index,
pdevice: pdevice,
device_memory_properties: device_memory_properties,
window: window,
surface_loader: surface_loader,
surface_format: surface_format,
present_queue: present_queue,
surface_resolution: surface_resolution,
swapchain_loader: swapchain_loader,
swapchain: swapchain,
present_images: present_images,
present_image_views: present_image_views,
pool: pool,
draw_command_buffer: draw_command_buffer,
setup_command_buffer: setup_command_buffer,
depth_image: depth_image,
depth_image_view: depth_image_view,
}
}
}
}
fn main() {
unsafe {
let base = ExampleBase::new(1920, 1080);
let fence_create_info = vk::FenceCreateInfo {
s_type: vk::StructureType::FenceCreateInfo,
p_next: ptr::null(),
flags: vk::FenceCreateFlags::empty(),
};
let command_buffer_begin_info = vk::CommandBufferBeginInfo {
s_type: vk::StructureType::CommandBufferBeginInfo,
p_next: ptr::null(),
p_inheritance_info: ptr::null(),
flags: vk::COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
};
let renderpass_attachments = let renderpass_attachments =
[vk::AttachmentDescription { [vk::AttachmentDescription {
format: surface_format.format, format: base.surface_format.format,
flags: vk::AttachmentDescriptionFlags::empty(), flags: vk::AttachmentDescriptionFlags::empty(),
samples: vk::SAMPLE_COUNT_1_BIT, samples: vk::SAMPLE_COUNT_1_BIT,
load_op: vk::AttachmentLoadOp::Clear, load_op: vk::AttachmentLoadOp::Clear,
@ -460,7 +538,7 @@ fn main() {
final_layout: vk::ImageLayout::PresentSrcKhr, final_layout: vk::ImageLayout::PresentSrcKhr,
}, },
vk::AttachmentDescription { vk::AttachmentDescription {
format: depth_image_create_info.format, format: vk::Format::D16Unorm,
flags: vk::AttachmentDescriptionFlags::empty(), flags: vk::AttachmentDescriptionFlags::empty(),
samples: vk::SAMPLE_COUNT_1_BIT, samples: vk::SAMPLE_COUNT_1_BIT,
load_op: vk::AttachmentLoadOp::Clear, load_op: vk::AttachmentLoadOp::Clear,
@ -512,10 +590,11 @@ fn main() {
dependency_count: 1, dependency_count: 1,
p_dependencies: &dependency, p_dependencies: &dependency,
}; };
let renderpass = device.create_render_pass(&renderpass_create_info).unwrap(); let renderpass = base.device.create_render_pass(&renderpass_create_info).unwrap();
let framebuffers: Vec<vk::Framebuffer> = present_image_views.iter() let framebuffers: Vec<vk::Framebuffer> = base.present_image_views
.iter()
.map(|&present_image_view| { .map(|&present_image_view| {
let framebuffer_attachments = [present_image_view, depth_image_view]; let framebuffer_attachments = [present_image_view, base.depth_image_view];
let frame_buffer_create_info = vk::FramebufferCreateInfo { let frame_buffer_create_info = vk::FramebufferCreateInfo {
s_type: vk::StructureType::FramebufferCreateInfo, s_type: vk::StructureType::FramebufferCreateInfo,
p_next: ptr::null(), p_next: ptr::null(),
@ -523,11 +602,11 @@ fn main() {
render_pass: renderpass, render_pass: renderpass,
attachment_count: framebuffer_attachments.len() as u32, attachment_count: framebuffer_attachments.len() as u32,
p_attachments: framebuffer_attachments.as_ptr(), p_attachments: framebuffer_attachments.as_ptr(),
width: surface_resoultion.width, width: base.surface_resolution.width,
height: surface_resoultion.height, height: base.surface_resolution.height,
layers: 1, layers: 1,
}; };
device.create_framebuffer(&frame_buffer_create_info).unwrap() base.device.create_framebuffer(&frame_buffer_create_info).unwrap()
}) })
.collect(); .collect();
let index_buffer_data = [0u32, 1, 2]; let index_buffer_data = [0u32, 1, 2];
@ -541,10 +620,10 @@ fn main() {
queue_family_index_count: 0, queue_family_index_count: 0,
p_queue_family_indices: ptr::null(), p_queue_family_indices: ptr::null(),
}; };
let index_buffer = device.create_buffer(&index_buffer_info).unwrap(); let index_buffer = base.device.create_buffer(&index_buffer_info).unwrap();
let index_buffer_memory_req = device.get_buffer_memory_requirements(index_buffer); let index_buffer_memory_req = base.device.get_buffer_memory_requirements(index_buffer);
let index_buffer_memory_index = find_memorytype_index(&index_buffer_memory_req, let index_buffer_memory_index = find_memorytype_index(&index_buffer_memory_req,
&device_memory_properties, &base.device_memory_properties,
vk::MEMORY_PROPERTY_HOST_VISIBLE_BIT) vk::MEMORY_PROPERTY_HOST_VISIBLE_BIT)
.expect("Unable to find suitable memorytype for the index buffer."); .expect("Unable to find suitable memorytype for the index buffer.");
let index_allocate_info = vk::MemoryAllocateInfo { let index_allocate_info = vk::MemoryAllocateInfo {
@ -553,15 +632,16 @@ fn main() {
allocation_size: index_buffer_memory_req.size, allocation_size: index_buffer_memory_req.size,
memory_type_index: index_buffer_memory_index, memory_type_index: index_buffer_memory_index,
}; };
let index_buffer_memory = device.allocate_memory(&index_allocate_info).unwrap(); let index_buffer_memory = base.device.allocate_memory(&index_allocate_info).unwrap();
let index_slice = device.map_memory::<u32>(index_buffer_memory, let index_slice = base.device
.map_memory::<u32>(index_buffer_memory,
0, 0,
index_buffer_info.size, index_buffer_info.size,
vk::MemoryMapFlags::empty()) vk::MemoryMapFlags::empty())
.unwrap(); .unwrap();
index_slice.copy_from_slice(&index_buffer_data); index_slice.copy_from_slice(&index_buffer_data);
device.unmap_memory(index_buffer_memory); base.device.unmap_memory(index_buffer_memory);
device.bind_buffer_memory(index_buffer, index_buffer_memory, 0).unwrap(); base.device.bind_buffer_memory(index_buffer, index_buffer_memory, 0).unwrap();
let vertex_input_buffer_info = vk::BufferCreateInfo { let vertex_input_buffer_info = vk::BufferCreateInfo {
s_type: vk::StructureType::BufferCreateInfo, s_type: vk::StructureType::BufferCreateInfo,
@ -573,12 +653,12 @@ fn main() {
queue_family_index_count: 0, queue_family_index_count: 0,
p_queue_family_indices: ptr::null(), p_queue_family_indices: ptr::null(),
}; };
let vertex_input_buffer = device.create_buffer(&vertex_input_buffer_info).unwrap(); let vertex_input_buffer = base.device.create_buffer(&vertex_input_buffer_info).unwrap();
let vertex_input_buffer_memory_req = let vertex_input_buffer_memory_req = base.device
device.get_buffer_memory_requirements(vertex_input_buffer); .get_buffer_memory_requirements(vertex_input_buffer);
let vertex_input_buffer_memory_index = let vertex_input_buffer_memory_index =
find_memorytype_index(&vertex_input_buffer_memory_req, find_memorytype_index(&vertex_input_buffer_memory_req,
&device_memory_properties, &base.device_memory_properties,
vk::MEMORY_PROPERTY_HOST_VISIBLE_BIT) vk::MEMORY_PROPERTY_HOST_VISIBLE_BIT)
.expect("Unable to find suitable memorytype for the vertex buffer."); .expect("Unable to find suitable memorytype for the vertex buffer.");
@ -588,7 +668,8 @@ fn main() {
allocation_size: vertex_input_buffer_memory_req.size, allocation_size: vertex_input_buffer_memory_req.size,
memory_type_index: vertex_input_buffer_memory_index, memory_type_index: vertex_input_buffer_memory_index,
}; };
let vertex_input_buffer_memory = device.allocate_memory(&vertex_buffer_allocate_info) let vertex_input_buffer_memory = base.device
.allocate_memory(&vertex_buffer_allocate_info)
.unwrap(); .unwrap();
let vertices = [Vertex { let vertices = [Vertex {
pos: [-1.0, 1.0, 0.0, 1.0], pos: [-1.0, 1.0, 0.0, 1.0],
@ -602,14 +683,15 @@ fn main() {
pos: [0.0, -1.0, 0.0, 1.0], pos: [0.0, -1.0, 0.0, 1.0],
color: [1.0, 0.0, 0.0, 1.0], color: [1.0, 0.0, 0.0, 1.0],
}]; }];
let slice = device.map_memory::<Vertex>(vertex_input_buffer_memory, let slice = base.device
.map_memory::<Vertex>(vertex_input_buffer_memory,
0, 0,
vertex_input_buffer_info.size, vertex_input_buffer_info.size,
vk::MemoryMapFlags::empty()) vk::MemoryMapFlags::empty())
.unwrap(); .unwrap();
slice.copy_from_slice(&vertices); slice.copy_from_slice(&vertices);
device.unmap_memory(vertex_input_buffer_memory); base.device.unmap_memory(vertex_input_buffer_memory);
device.bind_buffer_memory(vertex_input_buffer, vertex_input_buffer_memory, 0).unwrap(); base.device.bind_buffer_memory(vertex_input_buffer, vertex_input_buffer_memory, 0).unwrap();
let vertex_spv_file = File::open(Path::new("shader/vert.spv")) let vertex_spv_file = File::open(Path::new("shader/vert.spv"))
.expect("Could not find vert.spv."); .expect("Could not find vert.spv.");
let frag_spv_file = File::open(Path::new("shader/frag.spv")) let frag_spv_file = File::open(Path::new("shader/frag.spv"))
@ -631,10 +713,12 @@ fn main() {
code_size: frag_bytes.len(), code_size: frag_bytes.len(),
p_code: frag_bytes.as_ptr() as *const u32, p_code: frag_bytes.as_ptr() as *const u32,
}; };
let vertex_shader_module = device.create_shader_module(&vertex_shader_info) let vertex_shader_module = base.device
.create_shader_module(&vertex_shader_info)
.expect("Vertex shader module error"); .expect("Vertex shader module error");
let fragment_shader_module = device.create_shader_module(&frag_shader_info) let fragment_shader_module = base.device
.create_shader_module(&frag_shader_info)
.expect("Fragment shader module error"); .expect("Fragment shader module error");
let layout_create_info = vk::PipelineLayoutCreateInfo { let layout_create_info = vk::PipelineLayoutCreateInfo {
@ -647,7 +731,7 @@ fn main() {
p_push_constant_ranges: ptr::null(), p_push_constant_ranges: ptr::null(),
}; };
let pipeline_layout = device.create_pipeline_layout(&layout_create_info).unwrap(); let pipeline_layout = base.device.create_pipeline_layout(&layout_create_info).unwrap();
let shader_entry_name = CString::new("main").unwrap(); let shader_entry_name = CString::new("main").unwrap();
let shader_stage_create_infos = let shader_stage_create_infos =
@ -705,14 +789,14 @@ fn main() {
let viewports = [vk::Viewport { let viewports = [vk::Viewport {
x: 0.0, x: 0.0,
y: 0.0, y: 0.0,
width: surface_resoultion.width as f32, width: base.surface_resolution.width as f32,
height: surface_resoultion.height as f32, height: base.surface_resolution.height as f32,
min_depth: 0.0, min_depth: 0.0,
max_depth: 1.0, max_depth: 1.0,
}]; }];
let scissors = [vk::Rect2D { let scissors = [vk::Rect2D {
offset: vk::Offset2D { x: 0, y: 0 }, offset: vk::Offset2D { x: 0, y: 0 },
extent: surface_resoultion.clone(), extent: base.surface_resolution.clone(),
}]; }];
let viewport_state_info = vk::PipelineViewportStateCreateInfo { let viewport_state_info = vk::PipelineViewportStateCreateInfo {
s_type: vk::StructureType::PipelineViewportStateCreateInfo, s_type: vk::StructureType::PipelineViewportStateCreateInfo,
@ -822,8 +906,8 @@ fn main() {
base_pipeline_handle: vk::Pipeline::null(), base_pipeline_handle: vk::Pipeline::null(),
base_pipeline_index: 0, base_pipeline_index: 0,
}; };
let graphics_pipelines = let graphics_pipelines = base.device
device.create_graphics_pipelines(vk::PipelineCache::null(), &[graphic_pipeline_info]) .create_graphics_pipelines(vk::PipelineCache::null(), &[graphic_pipeline_info])
.unwrap(); .unwrap();
let graphic_pipeline = graphics_pipelines[0]; let graphic_pipeline = graphics_pipelines[0];
@ -833,22 +917,23 @@ fn main() {
p_next: ptr::null(), p_next: ptr::null(),
flags: Default::default(), flags: Default::default(),
}; };
let present_complete_semaphore = device.create_semaphore(&semaphore_create_info).unwrap(); let present_complete_semaphore =
let rendering_complete_semaphore = device.create_semaphore(&semaphore_create_info).unwrap(); base.device.create_semaphore(&semaphore_create_info).unwrap();
let rendering_complete_semaphore =
base.device.create_semaphore(&semaphore_create_info).unwrap();
let draw_fence = device.create_fence(&fence_create_info).unwrap(); let draw_fence = base.device.create_fence(&fence_create_info).unwrap();
while !window.should_close() { base.render_loop(|| {
glfw.poll_events(); let present_index = base.swapchain_loader
for (_, event) in glfw::flush_messages(&events) { .acquire_next_image_khr(base.swapchain,
handle_window_event(&mut window, event);
}
let present_index = swapchain_loader.acquire_next_image_khr(swapchain,
std::u64::MAX, std::u64::MAX,
present_complete_semaphore, present_complete_semaphore,
vk::Fence::null()) vk::Fence::null())
.unwrap(); .unwrap();
device.reset_command_buffer(draw_command_buffer, Default::default()).unwrap(); base.device.reset_command_buffer(base.draw_command_buffer, Default::default()).unwrap();
device.begin_command_buffer(draw_command_buffer, &command_buffer_begin_info).unwrap(); base.device
.begin_command_buffer(base.draw_command_buffer, &command_buffer_begin_info)
.unwrap();
let clear_values = let clear_values =
[vk::ClearValue::new_color(vk::ClearColorValue::new_float32([0.0, 0.0, 0.0, 0.0])), [vk::ClearValue::new_color(vk::ClearColorValue::new_float32([0.0, 0.0, 0.0, 0.0])),
vk::ClearValue::new_depth_stencil(vk::ClearDepthStencilValue { vk::ClearValue::new_depth_stencil(vk::ClearDepthStencilValue {
@ -863,22 +948,26 @@ fn main() {
framebuffer: framebuffers[present_index as usize], framebuffer: framebuffers[present_index as usize],
render_area: vk::Rect2D { render_area: vk::Rect2D {
offset: vk::Offset2D { x: 0, y: 0 }, offset: vk::Offset2D { x: 0, y: 0 },
extent: surface_resoultion.clone(), extent: base.surface_resolution.clone(),
}, },
clear_value_count: clear_values.len() as u32, clear_value_count: clear_values.len() as u32,
p_clear_values: clear_values.as_ptr(), p_clear_values: clear_values.as_ptr(),
}; };
device.cmd_begin_render_pass(draw_command_buffer, base.device.cmd_begin_render_pass(base.draw_command_buffer,
&render_pass_begin_info, &render_pass_begin_info,
vk::SubpassContents::Inline); vk::SubpassContents::Inline);
device.cmd_bind_pipeline(draw_command_buffer, base.device.cmd_bind_pipeline(base.draw_command_buffer,
vk::PipelineBindPoint::Graphics, vk::PipelineBindPoint::Graphics,
graphic_pipeline); graphic_pipeline);
device.cmd_set_viewport(draw_command_buffer, &viewports); base.device.cmd_set_viewport(base.draw_command_buffer, &viewports);
device.cmd_set_scissor(draw_command_buffer, &scissors); base.device.cmd_set_scissor(base.draw_command_buffer, &scissors);
device.cmd_bind_vertex_buffers(draw_command_buffer, &[vertex_input_buffer], &0); base.device
device.cmd_bind_index_buffer(draw_command_buffer, index_buffer, 0, vk::IndexType::Uint32); .cmd_bind_vertex_buffers(base.draw_command_buffer, &[vertex_input_buffer], &0);
device.cmd_draw_indexed(draw_command_buffer, base.device.cmd_bind_index_buffer(base.draw_command_buffer,
index_buffer,
0,
vk::IndexType::Uint32);
base.device.cmd_draw_indexed(base.draw_command_buffer,
index_buffer_data.len() as u32, index_buffer_data.len() as u32,
1, 1,
0, 0,
@ -886,8 +975,8 @@ fn main() {
1); 1);
// Or draw without the index buffer // Or draw without the index buffer
// device.cmd_draw(draw_command_buffer, 3, 1, 0, 0); // device.cmd_draw(draw_command_buffer, 3, 1, 0, 0);
device.cmd_end_render_pass(draw_command_buffer); base.device.cmd_end_render_pass(base.draw_command_buffer);
device.end_command_buffer(draw_command_buffer).unwrap(); base.device.end_command_buffer(base.draw_command_buffer).unwrap();
let wait_render_mask = [vk::PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT]; let wait_render_mask = [vk::PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT];
let submit_info = vk::SubmitInfo { let submit_info = vk::SubmitInfo {
s_type: vk::StructureType::SubmitInfo, s_type: vk::StructureType::SubmitInfo,
@ -896,11 +985,12 @@ fn main() {
p_wait_semaphores: &present_complete_semaphore, p_wait_semaphores: &present_complete_semaphore,
p_wait_dst_stage_mask: wait_render_mask.as_ptr(), p_wait_dst_stage_mask: wait_render_mask.as_ptr(),
command_buffer_count: 1, command_buffer_count: 1,
p_command_buffers: &draw_command_buffer, p_command_buffers: &base.draw_command_buffer,
signal_semaphore_count: 1, signal_semaphore_count: 1,
p_signal_semaphores: &rendering_complete_semaphore, p_signal_semaphores: &rendering_complete_semaphore,
}; };
device.queue_submit(present_queue, &[submit_info], draw_fence) base.device
.queue_submit(base.present_queue, &[submit_info], draw_fence)
.unwrap(); .unwrap();
let mut present_info_err = unsafe { mem::uninitialized() }; let mut present_info_err = unsafe { mem::uninitialized() };
let present_info = vk::PresentInfoKHR { let present_info = vk::PresentInfoKHR {
@ -909,46 +999,47 @@ fn main() {
wait_semaphore_count: 1, wait_semaphore_count: 1,
p_wait_semaphores: &rendering_complete_semaphore, p_wait_semaphores: &rendering_complete_semaphore,
swapchain_count: 1, swapchain_count: 1,
p_swapchains: &swapchain, p_swapchains: &base.swapchain,
p_image_indices: &present_index, p_image_indices: &present_index,
p_results: &mut present_info_err, p_results: &mut present_info_err,
}; };
device.queue_present_khr(present_queue, &present_info).unwrap(); base.device.queue_present_khr(base.present_queue, &present_info).unwrap();
device.wait_for_fences(&[draw_fence], true, std::u64::MAX) base.device
.wait_for_fences(&[draw_fence], true, std::u64::MAX)
.unwrap(); .unwrap();
device.reset_fences(&[draw_fence]).unwrap(); base.device.reset_fences(&[draw_fence]).unwrap();
} });
device.device_wait_idle().unwrap(); // device.device_wait_idle().unwrap();
device.destroy_semaphore(present_complete_semaphore); // device.destroy_semaphore(present_complete_semaphore);
device.destroy_semaphore(rendering_complete_semaphore); // device.destroy_semaphore(rendering_complete_semaphore);
for pipeline in graphics_pipelines { // for pipeline in graphics_pipelines {
device.destroy_pipeline(pipeline); // device.destroy_pipeline(pipeline);
} // }
device.destroy_pipeline_layout(pipeline_layout); // device.destroy_pipeline_layout(pipeline_layout);
device.destroy_shader_module(vertex_shader_module); // device.destroy_shader_module(vertex_shader_module);
device.destroy_shader_module(fragment_shader_module); // device.destroy_shader_module(fragment_shader_module);
device.free_memory(index_buffer_memory); // device.free_memory(index_buffer_memory);
device.destroy_buffer(index_buffer); // device.destroy_buffer(index_buffer);
device.free_memory(vertex_input_buffer_memory); // device.free_memory(vertex_input_buffer_memory);
device.destroy_buffer(vertex_input_buffer); // device.destroy_buffer(vertex_input_buffer);
for framebuffer in framebuffers { // for framebuffer in framebuffers {
device.destroy_framebuffer(framebuffer); // device.destroy_framebuffer(framebuffer);
} // }
device.destroy_render_pass(renderpass); // device.destroy_render_pass(renderpass);
device.destroy_image_view(depth_image_view); // device.destroy_image_view(depth_image_view);
device.destroy_fence(submit_fence); // device.destroy_fence(submit_fence);
device.destroy_fence(draw_fence); // device.destroy_fence(draw_fence);
device.free_memory(depth_image_memory); // device.free_memory(depth_image_memory);
device.destroy_image(depth_image); // device.destroy_image(depth_image);
for image_view in present_image_views { // for image_view in present_image_views {
device.destroy_image_view(image_view); // device.destroy_image_view(image_view);
} // }
device.destroy_command_pool(pool); // device.destroy_command_pool(pool);
swapchain_loader.destroy_swapchain_khr(swapchain); // swapchain_loader.destroy_swapchain_khr(swapchain);
device.destroy_device(); // device.destroy_device();
surface_loader.destroy_surface_khr(surface); // surface_loader.destroy_surface_khr(surface);
debug_report_loader.destroy_debug_report_callback_ext(debug_call_back); // debug_report_loader.destroy_debug_report_callback_ext(debug_call_back);
instance.destroy_instance(); // instance.destroy_instance();
} }
} }