diff --git a/.gitignore b/.gitignore index 33d84ac5..2ffecd4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ target -Cargo.lock +/Cargo.lock .cargo \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 73fc8404..5e7bc31f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ script: - cargo test --no-run -j 1 -v --manifest-path vulkano/Cargo.toml - cargo test --doc -j 1 -v --manifest-path vulkano/Cargo.toml - cargo build -j 1 --manifest-path examples/Cargo.toml + - cargo test --manifest-path www/Cargo.toml after_success: - | diff --git a/Cargo.toml b/Cargo.toml index 064edac3..8f596597 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,7 @@ members = [ "vulkano-shader-derive", "vulkano-win" ] + +exclude = [ + "www" +] diff --git a/www/.gitignore b/www/.gitignore index 45c15053..eb5a316c 100644 --- a/www/.gitignore +++ b/www/.gitignore @@ -1,3 +1 @@ -_site -.sass-cache -.jekyll-metadata +target diff --git a/www/Cargo.lock b/www/Cargo.lock new file mode 100644 index 00000000..fd5dd9a2 --- /dev/null +++ b/www/Cargo.lock @@ -0,0 +1,585 @@ +[root] +name = "vulkano-www" +version = "0.1.0" +dependencies = [ + "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "markdown 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mustache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rouille 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ascii" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "brotli-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "brotli2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "brotli-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "buf_redux" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "chrono" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "chunked_transfer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "encoding" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding-index-japanese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding-index-korean" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding-index-simpchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding-index-singlebyte" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding-index-tradchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "encoding_index_tests" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "env_logger" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "filetime" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "flate2" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", + "miniz-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gcc" +version = "0.3.51" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "idna" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.5 (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 = "lazy_static" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "log" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "markdown" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pipeline 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "matches" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mime" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mime_guess" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miniz-sys" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "multipart" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "buf_redux 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mime_guess 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mustache" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "percent-encoding" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "phf" +version = "0.7.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "phf_codegen" +version = "0.7.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "phf_generator" +version = "0.7.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "phf_shared 0.7.21 (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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "redox_syscall" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rouille" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "brotli2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", + "multipart 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny_http 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "siphasher" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "tempdir" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "term" +version = "0.2.14" +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)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread-id" +version = "2.0.0" +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.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +version = "0.1.37" +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.24 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tiny_http" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)", + "chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "0.2.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "url" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "uuid" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (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" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae7d751998c189c1d4468cf0a39bb2eae052a9c58d50ebb3b9591ee3813ad50" +"checksum brotli-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb50f54b2e0c671b7ef1637a76237ebacbb293be179440d5d65ca288e42116bb" +"checksum brotli2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8c7fec7e6a9ab96d7a91e8b2171606d1a2abce4f804d813dcea0297bc5b07ab7" +"checksum buf_redux 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b115bd9935c68b58f80ff867e1c46942c4aed79e78bcc8c2bc22d50f52bb9099" +"checksum chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "9213f7cd7c27e95c2b57c49f0e69b1ea65b27138da84a170133fd21b07659c00" +"checksum chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" +"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" +"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" +"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" +"checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" +"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" +"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" +"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" +"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" +"checksum filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "5363ab8e4139b8568a6237db5248646e5a8a2f89bd5ccb02092182b11fd3e922" +"checksum flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)" = "36df0166e856739905cd3d7e0b210fe818592211a008862599845e012d8d304c" +"checksum gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)" = "120d07f202dcc3f72859422563522b66fe6463a4c513df062874daad05f85f0a" +"checksum idna 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2233d4940b1f19f0418c158509cd7396b8d70a5db5705ce410914dc8fa603b37" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" +"checksum libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)" = "38f5c2b18a287cf78b4097db62e20f43cace381dc76ae5c0a3073067f78b7ddc" +"checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" +"checksum markdown 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bdb7e864aa1dccbebb05751e899bc84c639df47490c0c24caf4b1a77770b6566" +"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ec0c2f4d901bf1d4a2192a40b4b570ae3b19c51243e549defc1de741940aa787" +"checksum mime_guess 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "422acd80644209a8c8c66a20514840d8c092eb1eab2898ca7c548cc1d64c8998" +"checksum miniz-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "28eaee17666671fa872e567547e8428e83308ebe5808cdf6a0e28397dbe2c726" +"checksum multipart 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b68c9a0c757bd65893af529f7af6e7a71442e57ca6d9db1fa69b79e2f05f6b49" +"checksum mustache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5fa298dfe58b1f1192e0ee455aadb3369e298434652ad99b665439a40265fabd" +"checksum num 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "2c3a3dc9f30bf824141521b30c908a859ab190b76e20435fcd89f35eb6583887" +"checksum num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ef1a4bf6f9174aa5783a9b4cc892cacd11aebad6c69ad027a0b65c6ca5f8aa37" +"checksum num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d1891bd7b936f12349b7d1403761c8a0b85a18b148e9da4429d5d102c1a41e" +"checksum num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "1708c0628602a98b52fad936cf3edb9a107af06e52e49fdf0707e884456a6af6" +"checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" +"checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" +"checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" +"checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" +"checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" +"checksum pipeline 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" +"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d" +"checksum redox_syscall 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "3041aeb6000db123d2c9c751433f526e1f404b23213bd733167ab770c3989b4d" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum rouille 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89740b620f42b14a17a63ee577161da786aa15d08500d331cfb477bbacc8b5ab" +"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" +"checksum serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c97b18e9e53de541f11e497357d6c5eaeb39f0cb9c8734e274abe4935f6991fa" +"checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" +"checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" +"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" +"checksum term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "f2077e54d38055cf1ca0fd7933a2e00cd3ec8f6fed352b2a377f06dcdaaf3281" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "ffd7ccbf969a892bf83f1e441126968a07a3941c24ff522a26af9f9f4585d1a3" +"checksum tiny_http 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)" = "016f040cfc9b5be610de3619eaaa57017fa0b0b678187327bde75fc146e2a41f" +"checksum unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a6a2c4e3710edd365cd7e78383153ed739fa31af19f9172f72d3575060f5a43a" +"checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" +"checksum url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)" = "cbaa8377a162d88e7d15db0cf110c8523453edcbc5bc66d2b6fffccffa34a068" +"checksum url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "78c590b5bd79ed10aad8fb75f078a59d8db445af6c743e55c4a53227fc01c13f" +"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" diff --git a/www/Cargo.toml b/www/Cargo.toml new file mode 100644 index 00000000..d0a2c9c9 --- /dev/null +++ b/www/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "vulkano-www" +version = "0.1.0" +authors = ["Pierre Krieger "] +publish = false + +[dependencies] +lazy_static = "0.2" +markdown = "0.2.0" +mustache = "0.8" +rouille = "1.0" diff --git a/www/_config.yml b/www/_config.yml deleted file mode 100644 index bf6197d9..00000000 --- a/www/_config.yml +++ /dev/null @@ -1,21 +0,0 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your whole blog, values -# which you are expected to set up once and rarely need to edit after that. -# For technical reasons, this file is *NOT* reloaded automatically when you use -# 'jekyll serve'. If you change this file, please restart the server process. - -# Site settings -title: Vulkano library -email: your-email@domain.com -description: > # this means to ignore newlines until "baseurl:" - Write an awesome description for your new site here. You can edit this - line in _config.yml. It will appear in your document head meta (for - Google search results) and in your feed.xml site description. -baseurl: "" # the subpath of your site, e.g. /blog -url: "http://yourdomain.com" # the base hostname & protocol for your site -twitter_username: jekyllrb -github_username: jekyll - -# Build settings -markdown: kramdown diff --git a/www/_layouts/default.html b/www/_layouts/default.html deleted file mode 100644 index 36c079b1..00000000 --- a/www/_layouts/default.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} - - - - - - - - - - -
-
- {{ content }} -
-
- - - - - - - diff --git a/www/_layouts/page.html b/www/_layouts/page.html deleted file mode 100644 index ce233ad7..00000000 --- a/www/_layouts/page.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

-
- -
- {{ content }} -
- -
diff --git a/www/_layouts/post.html b/www/_layouts/post.html deleted file mode 100644 index 3a0fb52e..00000000 --- a/www/_layouts/post.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

- -
- -
- {{ content }} -
- -
diff --git a/www/_posts/2016-05-12-welcome-to-jekyll.md b/www/_posts/2016-05-12-welcome-to-jekyll.md deleted file mode 100644 index 40a7e912..00000000 --- a/www/_posts/2016-05-12-welcome-to-jekyll.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: post -title: "Welcome to Jekyll!" -date: 2016-05-12 15:35:29 +0200 -categories: jekyll update ---- -You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. - -To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. - -Jekyll also offers powerful support for code snippets: - -{% highlight rust %} -def print_hi(name) - puts "Hi, #{name}" -end -print_hi('Tom') -#=> prints 'Hi, Tom' to STDOUT. -{% endhighlight %} - -Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. - -[jekyll-docs]: http://jekyllrb.com/docs/home -[jekyll-gh]: https://github.com/jekyll/jekyll -[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/www/_sass/_base.scss b/www/_sass/_base.scss deleted file mode 100644 index 0883c3cd..00000000 --- a/www/_sass/_base.scss +++ /dev/null @@ -1,206 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - - - -/** - * Basic styling - */ -body { - font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; - color: $text-color; - background-color: $background-color; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-bottom: $spacing-unit / 2; -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: $base-font-weight; -} - - - -/** - * Links - */ -a { - color: $brand-color; - text-decoration: none; - - &:visited { - color: darken($brand-color, 15%); - } - - &:hover { - color: $text-color; - text-decoration: underline; - } -} - - - -/** - * Blockquotes - */ -blockquote { - color: $grey-color; - border-left: 4px solid $grey-color-light; - padding-left: $spacing-unit / 2; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; - - > :last-child { - margin-bottom: 0; - } -} - - - -/** - * Code formatting - */ -pre, -code { - font-size: 15px; - border: 1px solid $grey-color-light; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - - - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); - max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit; - padding-left: $spacing-unit; - @extend %clearfix; - - @include media-query($on-laptop) { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); - max-width: calc(#{$content-width} - (#{$spacing-unit})); - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - } -} - - - -/** - * Clearfix - */ -%clearfix { - - &:after { - content: ""; - display: table; - clear: both; - } -} - - - -/** - * Icons - */ -.icon { - - > svg { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - - path { - fill: $grey-color; - } - } -} diff --git a/www/_sass/_layout.scss b/www/_sass/_layout.scss deleted file mode 100644 index 9cbfddef..00000000 --- a/www/_sass/_layout.scss +++ /dev/null @@ -1,242 +0,0 @@ -/** - * Site header - */ -.site-header { - border-top: 5px solid $grey-color-dark; - border-bottom: 1px solid $grey-color-light; - min-height: 56px; - - // Positioning context for the mobile navigation icon - position: relative; -} - -.site-title { - font-size: 26px; - font-weight: 300; - line-height: 56px; - letter-spacing: -1px; - margin-bottom: 0; - float: left; - - &, - &:visited { - color: $grey-color-dark; - } -} - -.site-nav { - float: right; - line-height: 56px; - - .menu-icon { - display: none; - } - - .page-link { - color: $text-color; - line-height: $base-line-height; - - // Gaps between nav items, but not on the last one - &:not(:last-child) { - margin-right: 20px; - } - } - - @include media-query($on-palm) { - position: absolute; - top: 9px; - right: $spacing-unit / 2; - background-color: $background-color; - border: 1px solid $grey-color-light; - border-radius: 5px; - text-align: right; - - .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - - > svg { - width: 18px; - height: 15px; - - path { - fill: $grey-color-dark; - } - } - } - - .trigger { - clear: both; - display: none; - } - - &:hover .trigger { - display: block; - padding-bottom: 5px; - } - - .page-link { - display: block; - padding: 5px 10px; - - &:not(:last-child) { - margin-right: 0; - } - margin-left: 20px; - } - } -} - - - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid $grey-color-light; - padding: $spacing-unit 0; -} - -.footer-heading { - font-size: 18px; - margin-bottom: $spacing-unit / 2; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - font-size: 15px; - color: $grey-color; - margin-left: -$spacing-unit / 2; - @extend %clearfix; -} - -.footer-col { - float: left; - margin-bottom: $spacing-unit / 2; - padding-left: $spacing-unit / 2; -} - -.footer-col-1 { - width: -webkit-calc(35% - (#{$spacing-unit} / 2)); - width: calc(35% - (#{$spacing-unit} / 2)); -} - -.footer-col-2 { - width: -webkit-calc(20% - (#{$spacing-unit} / 2)); - width: calc(20% - (#{$spacing-unit} / 2)); -} - -.footer-col-3 { - width: -webkit-calc(45% - (#{$spacing-unit} / 2)); - width: calc(45% - (#{$spacing-unit} / 2)); -} - -@include media-query($on-laptop) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (#{$spacing-unit} / 2)); - width: calc(50% - (#{$spacing-unit} / 2)); - } - - .footer-col-3 { - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - -@include media-query($on-palm) { - .footer-col { - float: none; - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - - - -/** - * Page content - */ -.page-content { - padding: $spacing-unit 0; -} - -.page-heading { - font-size: 20px; -} - -.post-list { - margin-left: 0; - list-style: none; - - > li { - margin-bottom: $spacing-unit; - } -} - -.post-meta { - font-size: $small-font-size; - color: $grey-color; -} - -.post-link { - display: block; - font-size: 24px; -} - - - -/** - * Posts - */ -.post-header { - margin-bottom: $spacing-unit; -} - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; - - @include media-query($on-laptop) { - font-size: 36px; - } -} - -.post-content { - margin-bottom: $spacing-unit; - - h2 { - font-size: 32px; - - @include media-query($on-laptop) { - font-size: 28px; - } - } - - h3 { - font-size: 26px; - - @include media-query($on-laptop) { - font-size: 22px; - } - } - - h4 { - font-size: 20px; - - @include media-query($on-laptop) { - font-size: 18px; - } - } -} diff --git a/www/_sass/_syntax-highlighting.scss b/www/_sass/_syntax-highlighting.scss deleted file mode 100644 index 8fac5977..00000000 --- a/www/_sass/_syntax-highlighting.scss +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Syntax highlighting styles - */ -.highlight { - background: #fff; - @extend %vertical-rhythm; - - .highlighter-rouge & { - background: #eef; - } - - .c { color: #998; font-style: italic } // Comment - .err { color: #a61717; background-color: #e3d2d2 } // Error - .k { font-weight: bold } // Keyword - .o { font-weight: bold } // Operator - .cm { color: #998; font-style: italic } // Comment.Multiline - .cp { color: #999; font-weight: bold } // Comment.Preproc - .c1 { color: #998; font-style: italic } // Comment.Single - .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special - .gd { color: #000; background-color: #fdd } // Generic.Deleted - .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific - .ge { font-style: italic } // Generic.Emph - .gr { color: #a00 } // Generic.Error - .gh { color: #999 } // Generic.Heading - .gi { color: #000; background-color: #dfd } // Generic.Inserted - .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific - .go { color: #888 } // Generic.Output - .gp { color: #555 } // Generic.Prompt - .gs { font-weight: bold } // Generic.Strong - .gu { color: #aaa } // Generic.Subheading - .gt { color: #a00 } // Generic.Traceback - .kc { font-weight: bold } // Keyword.Constant - .kd { font-weight: bold } // Keyword.Declaration - .kp { font-weight: bold } // Keyword.Pseudo - .kr { font-weight: bold } // Keyword.Reserved - .kt { color: #458; font-weight: bold } // Keyword.Type - .m { color: #099 } // Literal.Number - .s { color: #d14 } // Literal.String - .na { color: #008080 } // Name.Attribute - .nb { color: #0086B3 } // Name.Builtin - .nc { color: #458; font-weight: bold } // Name.Class - .no { color: #008080 } // Name.Constant - .ni { color: #800080 } // Name.Entity - .ne { color: #900; font-weight: bold } // Name.Exception - .nf { color: #900; font-weight: bold } // Name.Function - .nn { color: #555 } // Name.Namespace - .nt { color: #000080 } // Name.Tag - .nv { color: #008080 } // Name.Variable - .ow { font-weight: bold } // Operator.Word - .w { color: #bbb } // Text.Whitespace - .mf { color: #099 } // Literal.Number.Float - .mh { color: #099 } // Literal.Number.Hex - .mi { color: #099 } // Literal.Number.Integer - .mo { color: #099 } // Literal.Number.Oct - .sb { color: #d14 } // Literal.String.Backtick - .sc { color: #d14 } // Literal.String.Char - .sd { color: #d14 } // Literal.String.Doc - .s2 { color: #d14 } // Literal.String.Double - .se { color: #d14 } // Literal.String.Escape - .sh { color: #d14 } // Literal.String.Heredoc - .si { color: #d14 } // Literal.String.Interpol - .sx { color: #d14 } // Literal.String.Other - .sr { color: #009926 } // Literal.String.Regex - .s1 { color: #d14 } // Literal.String.Single - .ss { color: #990073 } // Literal.String.Symbol - .bp { color: #999 } // Name.Builtin.Pseudo - .vc { color: #008080 } // Name.Variable.Class - .vg { color: #008080 } // Name.Variable.Global - .vi { color: #008080 } // Name.Variable.Instance - .il { color: #099 } // Literal.Number.Integer.Long -} diff --git a/www/about.md b/www/about.md deleted file mode 100644 index d024a8b5..00000000 --- a/www/about.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: page -title: About -permalink: /about/ ---- - -This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/) - -You can find the source code for the Jekyll new theme at: -[jekyll-new](https://github.com/jglovier/jekyll-new) - -You can find the source code for Jekyll at -[jekyll](https://github.com/jekyll/jekyll) diff --git a/www/guide/01-getting-started.md b/www/content/01-getting-started.md similarity index 77% rename from www/guide/01-getting-started.md rename to www/content/01-getting-started.md index 243c14fd..23a00fda 100644 --- a/www/guide/01-getting-started.md +++ b/www/content/01-getting-started.md @@ -1,13 +1,6 @@ ---- -layout: page -title: "Tutorial 1: getting started" ---- - # Getting started -{% highlight toml %} -vulkano = "0.1" -{% endhighlight %} + vulkano = "0.1" ## Creating an instance @@ -15,14 +8,12 @@ The first thing any Vulkan program should do is create an instance. Creating an whether Vulkan is supported on the system and loads the list of available devices from the environment. -{% highlight rust %} -// Put this at the top of the file. -use vulkano::instance::Instance; - -// Put this inside the main function. -let instance = Instance::new(None, &Default::default(), None) - .expect("failed to create instance"); -{% endhighlight %} + // Put this at the top of the file. + use vulkano::instance::Instance; +   + // Put this inside the main function. + let instance = Instance::new(None, &Default::default(), None) + .expect("failed to create instance"); There are three optional parameters that we can pass to the `new` functions: a description of your application, a list of extensions to enable, and a list of layers to enable. We don't need any of @@ -36,9 +27,7 @@ for example by opening a dialog box with an explanation. You can now try your code by running: -{% highlight bash %} -cargo run -{% endhighlight %} + cargo run ## Enumerating physical devices @@ -51,11 +40,9 @@ physical devices. The consequence is that you would probably gain nothing from u devices at once. At the moment everybody chooses the "best" device and uses it exclusively, like this: -{% highlight rust %} -use vulkano::instance::PhysicalDevice; - -let physical = PhysicalDevice::enumerate(&instance).next().expect("no device available"); -{% endhighlight %} + use vulkano::instance::PhysicalDevice; +   + let physical = PhysicalDevice::enumerate(&instance).next().expect("no device available"); The `enumerate` function returns an iterator to the list of available physical devices. We call `next` on it to return the first device, if any. Note that the first device is not diff --git a/www/guide/02-first-operation.md b/www/content/02-first-operation.md similarity index 74% rename from www/guide/02-first-operation.md rename to www/content/02-first-operation.md index f530c4ec..d18470be 100644 --- a/www/guide/02-first-operation.md +++ b/www/content/02-first-operation.md @@ -1,8 +1,3 @@ ---- -layout: page -title: "Tutorial 2: the first operation" ---- - # The first operation Now that we have chosen a physical device, it is time to ask it to do something. @@ -23,18 +18,16 @@ we are going to use. A `Device` object is an open channel of communication with a physical device. It is probably the most important object of the Vulkan API. -{% highlight rust %} -let (device, mut queues) = { - let device_ext = DeviceExtensions { - khr_swapchain: true, - .. DeviceExtensions::none() + let (device, mut queues) = { + let device_ext = DeviceExtensions { + khr_swapchain: true, + .. DeviceExtensions::none() + }; +   + Device::new(&physical, physical.supported_features(), &device_ext, None, + [(queue, 0.5)].iter().cloned()).expect("failed to create device") }; - Device::new(&physical, physical.supported_features(), &device_ext, None, - [(queue, 0.5)].iter().cloned()).expect("failed to create device") -}; -{% endhighlight %} - We now have an open channel of communication with a Vulkan device! In the rest of this article, we are going to ask the device to copy data from a buffer to @@ -46,12 +39,10 @@ to it early. To do so, let's create two buffers first: one source and one destination. There are multiple ways to create a buffer in vulkano, but for now we're going to use a `CpuAccessibleBuffer`. -{% highlight rust %} -let source = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) - .expect("failed to create buffer"); -let destination = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) - .expect("failed to create buffer"); -{% endhighlight %} + let source = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) + .expect("failed to create buffer"); + let destination = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) + .expect("failed to create buffer"); Creating a buffer in Vulkan requires passing several informations. @@ -75,16 +66,12 @@ which contains one or more commands, and then submit the command buffer. That sounds complicated, but it is not: -{% highlight rust %} -let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build(); -{% endhighlight %} + let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build(); We now have our command buffer! It is ready to be executed. The last thing we need to do is submit it to a queue for execution. -{% highlight rust %} - -{% endhighlight %} + Note: there are several things that we can do in a more optimal way. diff --git a/www/guide/03-window-swapchain.md b/www/content/03-window-swapchain.md similarity index 75% rename from www/guide/03-window-swapchain.md rename to www/content/03-window-swapchain.md index df33235c..ce965618 100644 --- a/www/guide/03-window-swapchain.md +++ b/www/content/03-window-swapchain.md @@ -1,8 +1,3 @@ ---- -layout: page -title: "Tutorial 3: windows and swapchains" ---- - # Windows and swapchains Vulkan can be used to perform calculations (like OpenCL for example), but its main usage is to @@ -21,25 +16,19 @@ without using any third-party crate, but doing so would require unsafe code. Let's add these dependencies to our Cargo.toml: -{% highlight toml %} -winit = "0.5" -vulkano-win = "0.1" -{% endhighlight %} + winit = "0.5" + vulkano-win = "0.1" ... and to our Rust code: -{% highlight rust %} -extern crate winit; -extern crate vulkano_win; -{% endhighlight %} + extern crate winit; + extern crate vulkano_win; Creating a window is as easy as this: -{% highlight rust %} -use vulkano_win::VkSurfaceBuild; - -let window = winit::WindowBuilder::new().build_vk_surface(&instance).unwrap(); -{% endhighlight %} + use vulkano_win::VkSurfaceBuild; +   + let window = winit::WindowBuilder::new().build_vk_surface(&instance).unwrap(); This code creates a window with the default parameters, and also builds a Vulkan *surface* object that represents the surface of that window whenever the Vulkan API is concerned. @@ -56,12 +45,10 @@ will return a list of the extensions that are needed on the current platform. In order to make this work, we need to modify the way the instance is created: -{% highlight rust %} -let instance = { - let extensions = vulkano_win::required_extensions(); - Instance::new(None, &extensions, None).expect("failed to create Vulkan instance") -}; -{% endhighlight %} + let instance = { + let extensions = vulkano_win::required_extensions(); + Instance::new(None, &extensions, None).expect("failed to create Vulkan instance") + }; After you made the change, running the program should now work and open then immediately close a window. @@ -74,6 +61,4 @@ Since the window is ultimately on the screen, things are a bit special. ## Clearing the image -{% highlight rust %} -let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build(); -{% endhighlight %} + let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build(); diff --git a/www/guide/04-render-pass.md b/www/content/04-render-pass.md similarity index 74% rename from www/guide/04-render-pass.md rename to www/content/04-render-pass.md index b265d3e2..80380e49 100644 --- a/www/guide/04-render-pass.md +++ b/www/content/04-render-pass.md @@ -1,8 +1,3 @@ ---- -layout: page -title: "Tutorial 4: render passes" ---- - # Render passes In the previous section, we created a window and asked the GPU to fill its surface with a color. @@ -40,29 +35,27 @@ complex usages, vulkano's API to create a render pass is a bit particular. TODO: provide a simpler way in vulkano to do that? -{% highlight rust %} -mod render_pass { - use vulkano::format::Format; - - single_pass_renderpass!{ - attachments: { - color: { - load: Clear, - store: Store, - format: Format, + mod render_pass { + use vulkano::format::Format; +   + single_pass_renderpass!{ + attachments: { + color: { + load: Clear, + store: Store, + format: Format, + } + }, + pass: { + color: [color], + depth_stencil: {} } - }, - pass: { - color: [color], - depth_stencil: {} } } -} - -let render_pass = render_pass::CustomRenderPass::new(&device, &render_pass::Formats { - color: (images[0].format(), 1) -}).unwrap(); -{% endhighlight %} +   + let render_pass = render_pass::CustomRenderPass::new(&device, &render_pass::Formats { + color: (images[0].format(), 1) + }).unwrap(); ## Entering the render pass @@ -76,15 +69,13 @@ Creating a framebuffer is typically done as part of the rendering process. Altho bad idea to keep the framebuffer objects alive between frames, but it won't kill your performances to create and destroy a few framebuffer objects during each frame. -{% highlight rust %} -let framebuffer = { - let image = &images[image_num]; - let dimensions = [image.dimensions()[0], image.dimensions()[1], 1]; - Framebuffer::new(&render_pass, dimensions, render_pass::AList { - color: image - }).unwrap() -}; -{% endhighlight %} + let framebuffer = { + let image = &images[image_num]; + let dimensions = [image.dimensions()[0], image.dimensions()[1], 1]; + Framebuffer::new(&render_pass, dimensions, render_pass::AList { + color: image + }).unwrap() + }; We are now ready the enter drawing mode! @@ -98,14 +89,12 @@ each attachment that was defined with `load: Clear`. Clearing our attachment has exactly the same effect as `clear_color_foo`, except that this time it is done by the rendering engine. -{% highlight rust %} -let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool) - .draw_inline(&render_pass, &framebuffer, render_pass::ClearValues { - color: [0.0, 0.0, 1.0, 1.0] - }) - .draw_end() - .build(); -{% endhighlight %} + let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool) + .draw_inline(&render_pass, &framebuffer, render_pass::ClearValues { + color: [0.0, 0.0, 1.0, 1.0] + }) + .draw_end() + .build(); We enter the render pass and immediately leave it afterward. In the next section, we are going to insert a function call between `draw_inline` and `draw_end`. diff --git a/www/guide/05-first-triangle.md b/www/content/05-first-triangle.md similarity index 72% rename from www/guide/05-first-triangle.md rename to www/content/05-first-triangle.md index 6ae4273f..a75dddf3 100644 --- a/www/guide/05-first-triangle.md +++ b/www/content/05-first-triangle.md @@ -1,8 +1,3 @@ ---- -layout: page -title: "Tutorial 5: the first triangle" ---- - # The first triangle Vulkan doesn't provide any function to easily draw shapes. There is no draw_rectangle, draw_cube @@ -37,14 +32,12 @@ create a struct named `Vertex` (the actual name doesn't matter) whose purpose is individual vertex. Our collection of vertices can later be represented by a collection of `Vertex` objects. -{% highlight rust %} -#[derive(Copy, Clone)] -struct Vertex { - position: [f32; 2], -} - -impl_vertex!(Vertex, position); -{% endhighlight %} + #[derive(Copy, Clone)] + struct Vertex { + position: [f32; 2], + } +   + impl_vertex!(Vertex, position); In order for the struct to be processed by vulkano, it must implement the `Vertex` trait provided by vulkano. This can be done automatically by calling the `impl_vertex!` macro whose parameters @@ -65,26 +58,22 @@ TODO: Finding the coordinates of our triangle Which translates into this code: -{% highlight rust %} -let vertex1 = Vertex { position: [-0.5, 0.5] }; -let vertex2 = Vertex { position: [ 0.0, -0.5] }; -let vertex3 = Vertex { position: [ 0.5, 0.25] }; -{% endhighlight %} + let vertex1 = Vertex { position: [-0.5, 0.5] }; + let vertex2 = Vertex { position: [ 0.0, -0.5] }; + let vertex3 = Vertex { position: [ 0.5, 0.25] }; But since this data is going to be read by the video card, we have to put it in a buffer. This is done in the same way as we did earlier. -{% highlight rust %} -let shape = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) - .expect("failed to create buffer"); - -{ - let mut content = shape.write(Duration::new(0, 0)).unwrap(); - content[0] = Vertex { position: [-0.5, 0.5] }; - content[1] = Vertex { position: [ 0.0, -0.5] }; - content[2] = Vertex { position: [ 0.5, 0.25] }; -} -{% endhighlight %} + let shape = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family())) + .expect("failed to create buffer"); +   + { + let mut content = shape.write(Duration::new(0, 0)).unwrap(); + content[0] = Vertex { position: [-0.5, 0.5] }; + content[1] = Vertex { position: [ 0.0, -0.5] }; + content[2] = Vertex { position: [ 0.5, 0.25] }; + } ## The graphics pipeline @@ -117,15 +106,13 @@ SPIR-V, which GLSL can compile to. Teaching you GLSL would be a bit too complica I will just give you the source codes. Here is the source code that we will use for the vertex shader: -{% highlight glsl %} -#version 450 - -layout(location = 0) in vec2 position; - -void main() { - gl_Position = vec4(position, 0.0, 1.0); -} -{% endhighlight %} + #version 450 +   + layout(location = 0) in vec2 position; +   + void main() { + gl_Position = vec4(position, 0.0, 1.0); + } When we defined the `Vertex` struct in our shape, we created a field named position which contains the position of our vertex. But contrary to what I let you think, this struct doesn't @@ -144,15 +131,13 @@ but four-dimensional coordinates (the reason for this will be covered in a later The second shader is called the fragment shader (sometimes also named pixel shader in other APIs). -{% highlight glsl %} -#version 450 - -layout(location = 0) out vec4 color; - -void main() { - color = vec4(1.0, 0.0, 0.0, 1.0); -} -{% endhighlight %} + #version 450 +   + layout(location = 0) out vec4 color; +   + void main() { + color = vec4(1.0, 0.0, 0.0, 1.0); + } This source code is very similar to our vertex shader above. This time the `main` function is executed once per pixel and has to return the color of this pixel, which we do with the @@ -168,30 +153,24 @@ This can be done through yet-another crate named `vulkano-shaders`. To use it, we have to tweak our Cargo.toml: -{% highlight toml %} -[build-dependencies] -vulkano-shaders = "0.1" -{% endhighlight %} + [build-dependencies] + vulkano-shaders = "0.1" Note that this is not a regular dependency, but a *build dependency*. We are not going to use the vulkano-shaders crate in the example itself, but in the *build script* of the example. -{% highlight toml %} -build = "build.rs" -{% endhighlight %} + build = "build.rs" Let's create a file named `build.rs` which will contain our build script. -{% highlight rust %} -extern crate vulkano_shaders; - -fn main() { - vulkano_shaders::build_glsl_shaders([ - ("src/vs.glsl", vulkano_shaders::ShaderType::Vertex), - ("src/fs.glsl", vulkano_shaders::ShaderType::Fragment), - ].iter().cloned()); -} -{% endhighlight %} + extern crate vulkano_shaders; +   + fn main() { + vulkano_shaders::build_glsl_shaders([ + ("src/vs.glsl", vulkano_shaders::ShaderType::Vertex), + ("src/fs.glsl", vulkano_shaders::ShaderType::Fragment), + ].iter().cloned()); + } This code will be compiled and executed before our real code, and will compile the `vs.glsl` and `fs.glsl` files into SPIR-V and put the result in the `target` directory of Cargo. @@ -202,10 +181,8 @@ the shaders. The consequence of this, is that the files generated by vulkano-sha not raw SPIR-V, but Rust code. In order to import them, we have to use the standard `include!` macro: -{% highlight rust %} -mod vs { include!{concat!(env!("OUT_DIR"), "/shaders/src/vs.glsl")} } -mod fs { include!{concat!(env!("OUT_DIR"), "/shaders/src/fs.glsl")} } -{% endhighlight %} + mod vs { include!{concat!(env!("OUT_DIR"), "/shaders/src/vs.glsl")} } + mod fs { include!{concat!(env!("OUT_DIR"), "/shaders/src/fs.glsl")} } The paths are the same as what we passed (including the extension), except that they are prefixed with `/shaders/`. @@ -215,10 +192,8 @@ For better isolation, we put the code inside modules. The Rust code generated for each shader always contains a struct named `Shader` with a `load` function. This is the glue between vulkano-shaders and vulkano. -{% highlight rust %} -let vs = vs::Shader::load(&device).expect("failed to create shader module"); -let fs = fs::Shader::load(&device).expect("failed to create shader module"); -{% endhighlight %} + let vs = vs::Shader::load(&device).expect("failed to create shader module"); + let fs = fs::Shader::load(&device).expect("failed to create shader module"); We now have a `vs` variable that represents our vertex shader, and a `fs` variable that represents our fragment shader. @@ -233,48 +208,46 @@ But the shaders are not enough. Before we can draw, we also need to build a pipe contains our two shaders but also a lot of additional parameters that describe how the rendering process will need to be performed. -{% highlight rust %} -use vulkano::descriptor::pipeline_layout::EmptyPipeline; -use vulkano::framebuffer::Subpass; -use vulkano::pipeline::GraphicsPipeline; -use vulkano::pipeline::GraphicsPipelineParams; -use vulkano::pipeline::blend::Blend; -use vulkano::pipeline::depth_stencil::DepthStencil; -use vulkano::pipeline::input_assembly::InputAssembly; -use vulkano::pipeline::multisample::Multisample; -use vulkano::pipeline::vertex::SingleBufferDefinition; -use vulkano::pipeline::viewport::ViewportsState; -use vulkano::pipeline::viewport::Viewport; -use vulkano::pipeline::viewport::Scissor; - -let pipeline = GraphicsPipeline::new(&device, GraphicsPipelineParams { - vertex_input: SingleBufferDefinition::new(), - vertex_shader: vs.main_entry_point(), - input_assembly: InputAssembly::triangle_list(), - tessellation: None, - geometry_shader: None, - - viewport: ViewportsState::Fixed { - data: vec![( - Viewport { - origin: [0.0, 0.0], - depth_range: 0.0 .. 1.0, - dimensions: [images[0].dimensions()[0] as f32, - images[0].dimensions()[1] as f32], - }, - Scissor::irrelevant() - )], - }, - - raster: Default::default(), - multisample: Multisample::disabled(), - fragment_shader: fs.main_entry_point(), - depth_stencil: DepthStencil::disabled(), - blend: Blend::pass_through(), - layout: &EmptyPipeline::new(&device).unwrap(), - render_pass: Subpass::from(&render_pass, 0).unwrap(), -}).unwrap(); -{% endhighlight %} + use vulkano::descriptor::pipeline_layout::EmptyPipeline; + use vulkano::framebuffer::Subpass; + use vulkano::pipeline::GraphicsPipeline; + use vulkano::pipeline::GraphicsPipelineParams; + use vulkano::pipeline::blend::Blend; + use vulkano::pipeline::depth_stencil::DepthStencil; + use vulkano::pipeline::input_assembly::InputAssembly; + use vulkano::pipeline::multisample::Multisample; + use vulkano::pipeline::vertex::SingleBufferDefinition; + use vulkano::pipeline::viewport::ViewportsState; + use vulkano::pipeline::viewport::Viewport; + use vulkano::pipeline::viewport::Scissor; +   + let pipeline = GraphicsPipeline::new(&device, GraphicsPipelineParams { + vertex_input: SingleBufferDefinition::new(), + vertex_shader: vs.main_entry_point(), + input_assembly: InputAssembly::triangle_list(), + tessellation: None, + geometry_shader: None, +   + viewport: ViewportsState::Fixed { + data: vec![( + Viewport { + origin: [0.0, 0.0], + depth_range: 0.0 .. 1.0, + dimensions: [images[0].dimensions()[0] as f32, + images[0].dimensions()[1] as f32], + }, + Scissor::irrelevant() + )], + }, +   + raster: Default::default(), + multisample: Multisample::disabled(), + fragment_shader: fs.main_entry_point(), + depth_stencil: DepthStencil::disabled(), + blend: Blend::pass_through(), + layout: &EmptyPipeline::new(&device).unwrap(), + render_pass: Subpass::from(&render_pass, 0).unwrap(), + }).unwrap(); A few noteworthy elements: @@ -309,12 +282,10 @@ for our pipeline object (like the viewport dimensions if you pass `Dynamic`), an that contain the external resources to pass to the shaders. We will cover everything later. For now only the first two parameters are relevant. -{% highlight rust %} -let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool) - .draw_inline(&render_pass, &framebuffer, render_pass::ClearValues { - color: [0.0, 0.0, 1.0, 1.0] - }) - .draw(&pipeline, &vertex_buffer, &DynamicState::none(), (), &()) - .draw_end() - .build(); -{% endhighlight %} + let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool) + .draw_inline(&render_pass, &framebuffer, render_pass::ClearValues { + color: [0.0, 0.0, 1.0, 1.0] + }) + .draw(&pipeline, &vertex_buffer, &DynamicState::none(), (), &()) + .draw_end() + .build(); diff --git a/www/content/home.md b/www/content/home.md new file mode 100644 index 00000000..30d74d25 --- /dev/null +++ b/www/content/home.md @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/www/content/template.html b/www/content/template.html new file mode 100644 index 00000000..e9cd9466 --- /dev/null +++ b/www/content/template.html @@ -0,0 +1,16 @@ + + + Vulkano + + + + +
+

Vulkano

+
+ +
+ {{{body}}} +
+ + diff --git a/www/css/main.scss b/www/css/main.scss deleted file mode 100644 index f2e566e2..00000000 --- a/www/css/main.scss +++ /dev/null @@ -1,53 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- -@charset "utf-8"; - - - -// Our variables -$base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -$base-font-size: 16px; -$base-font-weight: 400; -$small-font-size: $base-font-size * 0.875; -$base-line-height: 1.5; - -$spacing-unit: 30px; - -$text-color: #111; -$background-color: #fdfdfd; -$brand-color: #2a7ae2; - -$grey-color: #828282; -$grey-color-light: lighten($grey-color, 40%); -$grey-color-dark: darken($grey-color, 25%); - -// Width of the content area -$content-width: 800px; - -$on-palm: 600px; -$on-laptop: 800px; - - - -// Use media queries like this: -// @include media-query($on-palm) { -// .wrapper { -// padding-right: $spacing-unit / 2; -// padding-left: $spacing-unit / 2; -// } -// } -@mixin media-query($device) { - @media screen and (max-width: $device) { - @content; - } -} - - - -// Import partials from `sass_dir` (defaults to `_sass`) -@import - "base", - "layout", - "syntax-highlighting" -; diff --git a/www/feed.xml b/www/feed.xml deleted file mode 100644 index a6628bd8..00000000 --- a/www/feed.xml +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: null ---- - - - - {{ site.title | xml_escape }} - {{ site.description | xml_escape }} - {{ site.url }}{{ site.baseurl }}/ - - {{ site.time | date_to_rfc822 }} - {{ site.time | date_to_rfc822 }} - Jekyll v{{ jekyll.version }} - {% for post in site.posts limit:10 %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date_to_rfc822 }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {% for tag in post.tags %} - {{ tag | xml_escape }} - {% endfor %} - {% for cat in post.categories %} - {{ cat | xml_escape }} - {% endfor %} - - {% endfor %} - - diff --git a/www/index.html b/www/index.html deleted file mode 100644 index aa028a9a..00000000 --- a/www/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default ---- - -
- - test - -

Posts

- - - -

subscribe via RSS

- -
diff --git a/www/src/bin/main.rs b/www/src/bin/main.rs new file mode 100644 index 00000000..a3a184c0 --- /dev/null +++ b/www/src/bin/main.rs @@ -0,0 +1,18 @@ +// Copyright (c) 2017 The vulkano developers +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , +// at your option. All files in the project carrying such +// notice may not be copied, modified, or distributed except +// according to those terms. + +extern crate vulkano_www; + +use std::env; + +fn main() { + let addr = env::var("ADDR").unwrap_or("0.0.0.0:8000".to_owned()); + println!("Listening on {}", addr); + vulkano_www::start(&addr) +} diff --git a/www/src/lib.rs b/www/src/lib.rs new file mode 100644 index 00000000..0df522c1 --- /dev/null +++ b/www/src/lib.rs @@ -0,0 +1,96 @@ +// Copyright (c) 2017 The vulkano developers +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , +// at your option. All files in the project carrying such +// notice may not be copied, modified, or distributed except +// according to those terms. + +#[macro_use] +extern crate lazy_static; +extern crate markdown; +extern crate mustache; +#[macro_use] +extern crate rouille; + +use std::collections::HashMap; +use std::io; +use std::net::ToSocketAddrs; +use std::sync::Mutex; +use rouille::Response; + +pub fn start(addr: A) +where + A: ToSocketAddrs, +{ + rouille::start_server(addr, move |request| { + rouille::content_encoding::apply( + &request, + rouille::log(request, io::stdout(), || { + { + let mut r = rouille::match_assets(request, "./static"); + if r.is_success() { + r.headers.push(( + "Cache-Control".into(), + format!("max-age={}", 2 * 60 * 60).into(), + )); + return r; + } + } + + router!(request, + (GET) (/) => { + render_template(include_str!("../content/home.md")) + }, + _ => { + if let Some(request) = request.remove_prefix("/guides") { + if request.raw_url().starts_with("/01") { + render_template(include_str!("../content/01-getting-started.md")) + } else if request.raw_url().starts_with("/02") { + render_template(include_str!("../content/02-first-operation.md")) + } else if request.raw_url().starts_with("/03") { + render_template(include_str!("../content/03-window-swapchain.md")) + } else if request.raw_url().starts_with("/04") { + render_template(include_str!("../content/04-render-pass.md")) + } else if request.raw_url().starts_with("/05") { + render_template(include_str!("../content/05-first-triangle.md")) + } else { + Response::empty_404() + } + } else { + Response::empty_404() + } + } + ) + }), + ) + }); +} + +fn render_template(markdown: &'static str) -> Response { + lazy_static! { + static ref MAIN_TEMPLATE: mustache::Template = { + mustache::compile_str(&include_str!("../content/template.html")).unwrap() + }; + + static ref CACHE: Mutex> = Mutex::new(HashMap::new()); + } + + // The markdown crate somehow takes a lot of time (10s in debug, 800ms in release), so we cache + // the compilation result. + let mut compil_cache = CACHE.lock().unwrap(); + let html = compil_cache.entry(markdown).or_insert_with(|| { + let body = markdown::to_html(markdown); + + let data = mustache::MapBuilder::new() + .insert_str("body", body) + .build(); + + let mut out = Vec::new(); + MAIN_TEMPLATE.render_data(&mut out, &data).unwrap(); + String::from_utf8(out).unwrap() + }); + + Response::html(html.clone()) +} diff --git a/www/static/style.css b/www/static/style.css new file mode 100644 index 00000000..3f256a28 --- /dev/null +++ b/www/static/style.css @@ -0,0 +1,52 @@ +/* + * General + */ +@import url('https://fonts.googleapis.com/css?family=Muli'); + +body { + background-color: #222; + color: white; + font-family: 'Muli', Verdana, Geneva, Tahoma, sans-serif; + font-size: 1.1em; + margin: 0; + padding: 0; +} + +a { + color: white; +} + +/* + * Header + */ +header { + background-color: #854f00; + margin: 0; + padding: 0; +} + +header h1 { + font-size: 3em; + margin: 0; + padding: 2em 0; + text-align: center; +} + +/* + * Body + */ +#body-main { + margin: 2em auto; + width: 80%; +} + +#body-main h2 { + margin-top: 1.5em; +} + +#body-main pre { + background-color: #111; + border: 1px dashed #888; + border-radius: 2px; + padding: 0.7em 1.5em; +}