mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2024-11-21 22:34:43 +00:00
Some work on the website
This commit is contained in:
parent
39b6ac5f76
commit
fba5c95250
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
target
|
target
|
||||||
Cargo.lock
|
/Cargo.lock
|
||||||
.cargo
|
.cargo
|
@ -31,6 +31,7 @@ script:
|
|||||||
- cargo test --no-run -j 1 -v --manifest-path vulkano/Cargo.toml
|
- cargo test --no-run -j 1 -v --manifest-path vulkano/Cargo.toml
|
||||||
- cargo test --doc -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 build -j 1 --manifest-path examples/Cargo.toml
|
||||||
|
- cargo test --manifest-path www/Cargo.toml
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- |
|
- |
|
||||||
|
@ -8,3 +8,7 @@ members = [
|
|||||||
"vulkano-shader-derive",
|
"vulkano-shader-derive",
|
||||||
"vulkano-win"
|
"vulkano-win"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
exclude = [
|
||||||
|
"www"
|
||||||
|
]
|
||||||
|
4
www/.gitignore
vendored
4
www/.gitignore
vendored
@ -1,3 +1 @@
|
|||||||
_site
|
target
|
||||||
.sass-cache
|
|
||||||
.jekyll-metadata
|
|
||||||
|
585
www/Cargo.lock
generated
Normal file
585
www/Cargo.lock
generated
Normal file
@ -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"
|
11
www/Cargo.toml
Normal file
11
www/Cargo.toml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[package]
|
||||||
|
name = "vulkano-www"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Pierre Krieger <pierre.krieger1708@gmail.com>"]
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
lazy_static = "0.2"
|
||||||
|
markdown = "0.2.0"
|
||||||
|
mustache = "0.8"
|
||||||
|
rouille = "1.0"
|
@ -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
|
|
@ -1,80 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
|
|
||||||
<title>{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}</title>
|
|
||||||
<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
|
|
||||||
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
|
|
||||||
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header class="site-header">
|
|
||||||
|
|
||||||
<div class="wrapper">
|
|
||||||
|
|
||||||
<a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
|
|
||||||
|
|
||||||
<nav class="site-nav">
|
|
||||||
<a href="#" class="menu-icon">
|
|
||||||
<svg viewBox="0 0 18 15">
|
|
||||||
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
|
||||||
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
|
||||||
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="trigger">
|
|
||||||
{% for my_page in site.pages %}
|
|
||||||
{% if my_page.title %}
|
|
||||||
<a class="page-link" href="{{ my_page.url | prepend: site.baseurl }}">{{ my_page.title }}</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="page-content">
|
|
||||||
<div class="wrapper">
|
|
||||||
{{ content }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="site-footer">
|
|
||||||
<div class="wrapper">
|
|
||||||
|
|
||||||
<h2 class="footer-heading">{{ site.title }}</h2>
|
|
||||||
|
|
||||||
<div class="footer-col-wrapper">
|
|
||||||
<div class="footer-col footer-col-1">
|
|
||||||
<ul class="contact-list">
|
|
||||||
<li>{{ site.title }}</li>
|
|
||||||
<li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer-col footer-col-2">
|
|
||||||
<ul class="social-media-list">
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer-col footer-col-3">
|
|
||||||
<p>{{ site.description }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
layout: default
|
|
||||||
---
|
|
||||||
<article class="post">
|
|
||||||
|
|
||||||
<header class="post-header">
|
|
||||||
<h1 class="post-title">{{ page.title }}</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="post-content">
|
|
||||||
{{ content }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</article>
|
|
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
layout: default
|
|
||||||
---
|
|
||||||
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
|
|
||||||
|
|
||||||
<header class="post-header">
|
|
||||||
<h1 class="post-title" itemprop="name headline">{{ page.title }}</h1>
|
|
||||||
<p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time>{% if page.author %} • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>{% endif %}</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="post-content" itemprop="articleBody">
|
|
||||||
{{ content }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</article>
|
|
@ -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/
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
13
www/about.md
13
www/about.md
@ -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)
|
|
@ -1,13 +1,6 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
title: "Tutorial 1: getting started"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Getting started
|
# Getting started
|
||||||
|
|
||||||
{% highlight toml %}
|
vulkano = "0.1"
|
||||||
vulkano = "0.1"
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
## Creating an instance
|
## 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
|
whether Vulkan is supported on the system and loads the list of available devices from the
|
||||||
environment.
|
environment.
|
||||||
|
|
||||||
{% highlight rust %}
|
// Put this at the top of the file.
|
||||||
// Put this at the top of the file.
|
use vulkano::instance::Instance;
|
||||||
use vulkano::instance::Instance;
|
|
||||||
|
// Put this inside the main function.
|
||||||
// Put this inside the main function.
|
let instance = Instance::new(None, &Default::default(), None)
|
||||||
let instance = Instance::new(None, &Default::default(), None)
|
.expect("failed to create instance");
|
||||||
.expect("failed to create instance");
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
There are three optional parameters that we can pass to the `new` functions: a description of your
|
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
|
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:
|
You can now try your code by running:
|
||||||
|
|
||||||
{% highlight bash %}
|
cargo run
|
||||||
cargo run
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
## Enumerating physical devices
|
## 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
|
devices at once. At the moment everybody chooses the "best" device and uses it exclusively, like
|
||||||
this:
|
this:
|
||||||
|
|
||||||
{% highlight rust %}
|
use vulkano::instance::PhysicalDevice;
|
||||||
use vulkano::instance::PhysicalDevice;
|
|
||||||
|
let physical = PhysicalDevice::enumerate(&instance).next().expect("no device available");
|
||||||
let physical = PhysicalDevice::enumerate(&instance).next().expect("no device available");
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
The `enumerate` function returns an iterator to the list of available physical devices.
|
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
|
We call `next` on it to return the first device, if any. Note that the first device is not
|
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
title: "Tutorial 2: the first operation"
|
|
||||||
---
|
|
||||||
|
|
||||||
# The first operation
|
# The first operation
|
||||||
|
|
||||||
Now that we have chosen a physical device, it is time to ask it to do something.
|
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
|
A `Device` object is an open channel of communication with a physical device. It is probably the
|
||||||
most important object of the Vulkan API.
|
most important object of the Vulkan API.
|
||||||
|
|
||||||
{% highlight rust %}
|
let (device, mut queues) = {
|
||||||
let (device, mut queues) = {
|
let device_ext = DeviceExtensions {
|
||||||
let device_ext = DeviceExtensions {
|
khr_swapchain: true,
|
||||||
khr_swapchain: true,
|
.. DeviceExtensions::none()
|
||||||
.. 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!
|
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
|
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
|
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`.
|
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()))
|
||||||
let source = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family()))
|
.expect("failed to create buffer");
|
||||||
.expect("failed to create buffer");
|
let destination = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family()))
|
||||||
let destination = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family()))
|
.expect("failed to create buffer");
|
||||||
.expect("failed to create buffer");
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
Creating a buffer in Vulkan requires passing several informations.
|
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:
|
That sounds complicated, but it is not:
|
||||||
|
|
||||||
{% highlight rust %}
|
let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build();
|
||||||
let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build();
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
We now have our command buffer! It is ready to be executed. The last thing we need to do is
|
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.
|
submit it to a queue for execution.
|
||||||
|
|
||||||
{% highlight rust %}
|
|
||||||
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
Note: there are several things that we can do in a more optimal way.
|
Note: there are several things that we can do in a more optimal way.
|
||||||
|
|
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
title: "Tutorial 3: windows and swapchains"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Windows and swapchains
|
# Windows and swapchains
|
||||||
|
|
||||||
Vulkan can be used to perform calculations (like OpenCL for example), but its main usage is to
|
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:
|
Let's add these dependencies to our Cargo.toml:
|
||||||
|
|
||||||
{% highlight toml %}
|
winit = "0.5"
|
||||||
winit = "0.5"
|
vulkano-win = "0.1"
|
||||||
vulkano-win = "0.1"
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
... and to our Rust code:
|
... and to our Rust code:
|
||||||
|
|
||||||
{% highlight rust %}
|
extern crate winit;
|
||||||
extern crate winit;
|
extern crate vulkano_win;
|
||||||
extern crate vulkano_win;
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
Creating a window is as easy as this:
|
Creating a window is as easy as this:
|
||||||
|
|
||||||
{% highlight rust %}
|
use vulkano_win::VkSurfaceBuild;
|
||||||
use vulkano_win::VkSurfaceBuild;
|
|
||||||
|
let window = winit::WindowBuilder::new().build_vk_surface(&instance).unwrap();
|
||||||
let window = winit::WindowBuilder::new().build_vk_surface(&instance).unwrap();
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
This code creates a window with the default parameters, and also builds a Vulkan *surface* object
|
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.
|
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:
|
In order to make this work, we need to modify the way the instance is created:
|
||||||
|
|
||||||
{% highlight rust %}
|
let instance = {
|
||||||
let instance = {
|
let extensions = vulkano_win::required_extensions();
|
||||||
let extensions = vulkano_win::required_extensions();
|
Instance::new(None, &extensions, None).expect("failed to create Vulkan instance")
|
||||||
Instance::new(None, &extensions, None).expect("failed to create Vulkan instance")
|
};
|
||||||
};
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
After you made the change, running the program should now work and open then immediately close
|
After you made the change, running the program should now work and open then immediately close
|
||||||
a window.
|
a window.
|
||||||
@ -74,6 +61,4 @@ Since the window is ultimately on the screen, things are a bit special.
|
|||||||
|
|
||||||
## Clearing the image
|
## Clearing the image
|
||||||
|
|
||||||
{% highlight rust %}
|
let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build();
|
||||||
let cmd = PrimaryCommandBuffer::new().copy(&source, &destination).build();
|
|
||||||
{% endhighlight %}
|
|
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
title: "Tutorial 4: render passes"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Render passes
|
# Render passes
|
||||||
|
|
||||||
In the previous section, we created a window and asked the GPU to fill its surface with a color.
|
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?
|
TODO: provide a simpler way in vulkano to do that?
|
||||||
|
|
||||||
{% highlight rust %}
|
mod render_pass {
|
||||||
mod render_pass {
|
use vulkano::format::Format;
|
||||||
use vulkano::format::Format;
|
|
||||||
|
single_pass_renderpass!{
|
||||||
single_pass_renderpass!{
|
attachments: {
|
||||||
attachments: {
|
color: {
|
||||||
color: {
|
load: Clear,
|
||||||
load: Clear,
|
store: Store,
|
||||||
store: Store,
|
format: Format,
|
||||||
format: Format,
|
}
|
||||||
|
},
|
||||||
|
pass: {
|
||||||
|
color: [color],
|
||||||
|
depth_stencil: {}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
pass: {
|
|
||||||
color: [color],
|
|
||||||
depth_stencil: {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
let render_pass = render_pass::CustomRenderPass::new(&device, &render_pass::Formats {
|
||||||
let render_pass = render_pass::CustomRenderPass::new(&device, &render_pass::Formats {
|
color: (images[0].format(), 1)
|
||||||
color: (images[0].format(), 1)
|
}).unwrap();
|
||||||
}).unwrap();
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
## Entering the render pass
|
## 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
|
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.
|
performances to create and destroy a few framebuffer objects during each frame.
|
||||||
|
|
||||||
{% highlight rust %}
|
let framebuffer = {
|
||||||
let framebuffer = {
|
let image = &images[image_num];
|
||||||
let image = &images[image_num];
|
let dimensions = [image.dimensions()[0], image.dimensions()[1], 1];
|
||||||
let dimensions = [image.dimensions()[0], image.dimensions()[1], 1];
|
Framebuffer::new(&render_pass, dimensions, render_pass::AList {
|
||||||
Framebuffer::new(&render_pass, dimensions, render_pass::AList {
|
color: image
|
||||||
color: image
|
}).unwrap()
|
||||||
}).unwrap()
|
};
|
||||||
};
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
We are now ready the enter drawing mode!
|
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
|
Clearing our attachment has exactly the same effect as `clear_color_foo`, except that this
|
||||||
time it is done by the rendering engine.
|
time it is done by the rendering engine.
|
||||||
|
|
||||||
{% highlight rust %}
|
let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool)
|
||||||
let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool)
|
.draw_inline(&render_pass, &framebuffer, render_pass::ClearValues {
|
||||||
.draw_inline(&render_pass, &framebuffer, render_pass::ClearValues {
|
color: [0.0, 0.0, 1.0, 1.0]
|
||||||
color: [0.0, 0.0, 1.0, 1.0]
|
})
|
||||||
})
|
.draw_end()
|
||||||
.draw_end()
|
.build();
|
||||||
.build();
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
We enter the render pass and immediately leave it afterward. In the next section, we are going
|
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`.
|
to insert a function call between `draw_inline` and `draw_end`.
|
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
title: "Tutorial 5: the first triangle"
|
|
||||||
---
|
|
||||||
|
|
||||||
# The first triangle
|
# The first triangle
|
||||||
|
|
||||||
Vulkan doesn't provide any function to easily draw shapes. There is no draw_rectangle, draw_cube
|
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`
|
individual vertex. Our collection of vertices can later be represented by a collection of `Vertex`
|
||||||
objects.
|
objects.
|
||||||
|
|
||||||
{% highlight rust %}
|
#[derive(Copy, Clone)]
|
||||||
#[derive(Copy, Clone)]
|
struct Vertex {
|
||||||
struct Vertex {
|
position: [f32; 2],
|
||||||
position: [f32; 2],
|
}
|
||||||
}
|
|
||||||
|
impl_vertex!(Vertex, position);
|
||||||
impl_vertex!(Vertex, position);
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
In order for the struct to be processed by vulkano, it must implement the `Vertex` trait provided
|
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
|
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:
|
Which translates into this code:
|
||||||
|
|
||||||
{% highlight rust %}
|
let vertex1 = Vertex { position: [-0.5, 0.5] };
|
||||||
let vertex1 = Vertex { position: [-0.5, 0.5] };
|
let vertex2 = Vertex { position: [ 0.0, -0.5] };
|
||||||
let vertex2 = Vertex { position: [ 0.0, -0.5] };
|
let vertex3 = Vertex { position: [ 0.5, 0.25] };
|
||||||
let vertex3 = Vertex { position: [ 0.5, 0.25] };
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
But since this data is going to be read by the video card, we have to put it in a buffer. This is
|
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.
|
done in the same way as we did earlier.
|
||||||
|
|
||||||
{% highlight rust %}
|
let shape = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family()))
|
||||||
let shape = CpuAccessibleBuffer::array(&device, 3, &BufferUsage::all(), Some(queue.family()))
|
.expect("failed to create buffer");
|
||||||
.expect("failed to create buffer");
|
|
||||||
|
{
|
||||||
{
|
let mut content = shape.write(Duration::new(0, 0)).unwrap();
|
||||||
let mut content = shape.write(Duration::new(0, 0)).unwrap();
|
content[0] = Vertex { position: [-0.5, 0.5] };
|
||||||
content[0] = Vertex { position: [-0.5, 0.5] };
|
content[1] = Vertex { position: [ 0.0, -0.5] };
|
||||||
content[1] = Vertex { position: [ 0.0, -0.5] };
|
content[2] = Vertex { position: [ 0.5, 0.25] };
|
||||||
content[2] = Vertex { position: [ 0.5, 0.25] };
|
}
|
||||||
}
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
## The graphics pipeline
|
## 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
|
I will just give you the source codes. Here is the source code that we will use for the vertex
|
||||||
shader:
|
shader:
|
||||||
|
|
||||||
{% highlight glsl %}
|
#version 450
|
||||||
#version 450
|
|
||||||
|
layout(location = 0) in vec2 position;
|
||||||
layout(location = 0) in vec2 position;
|
|
||||||
|
void main() {
|
||||||
void main() {
|
gl_Position = vec4(position, 0.0, 1.0);
|
||||||
gl_Position = vec4(position, 0.0, 1.0);
|
}
|
||||||
}
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
When we defined the `Vertex` struct in our shape, we created a field named position which
|
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
|
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).
|
The second shader is called the fragment shader (sometimes also named pixel shader in other APIs).
|
||||||
|
|
||||||
{% highlight glsl %}
|
#version 450
|
||||||
#version 450
|
|
||||||
|
layout(location = 0) out vec4 color;
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
void main() {
|
||||||
void main() {
|
color = vec4(1.0, 0.0, 0.0, 1.0);
|
||||||
color = vec4(1.0, 0.0, 0.0, 1.0);
|
}
|
||||||
}
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
This source code is very similar to our vertex shader above. This time the `main` function is
|
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
|
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:
|
To use it, we have to tweak our Cargo.toml:
|
||||||
|
|
||||||
{% highlight toml %}
|
[build-dependencies]
|
||||||
[build-dependencies]
|
vulkano-shaders = "0.1"
|
||||||
vulkano-shaders = "0.1"
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
Note that this is not a regular dependency, but a *build dependency*. We are not going to use
|
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.
|
the vulkano-shaders crate in the example itself, but in the *build script* of the example.
|
||||||
|
|
||||||
{% highlight toml %}
|
build = "build.rs"
|
||||||
build = "build.rs"
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
Let's create a file named `build.rs` which will contain our build script.
|
Let's create a file named `build.rs` which will contain our build script.
|
||||||
|
|
||||||
{% highlight rust %}
|
extern crate vulkano_shaders;
|
||||||
extern crate vulkano_shaders;
|
|
||||||
|
fn main() {
|
||||||
fn main() {
|
vulkano_shaders::build_glsl_shaders([
|
||||||
vulkano_shaders::build_glsl_shaders([
|
("src/vs.glsl", vulkano_shaders::ShaderType::Vertex),
|
||||||
("src/vs.glsl", vulkano_shaders::ShaderType::Vertex),
|
("src/fs.glsl", vulkano_shaders::ShaderType::Fragment),
|
||||||
("src/fs.glsl", vulkano_shaders::ShaderType::Fragment),
|
].iter().cloned());
|
||||||
].iter().cloned());
|
}
|
||||||
}
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
This code will be compiled and executed before our real code, and will compile the `vs.glsl` and
|
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.
|
`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!`
|
not raw SPIR-V, but Rust code. In order to import them, we have to use the standard `include!`
|
||||||
macro:
|
macro:
|
||||||
|
|
||||||
{% highlight rust %}
|
mod vs { include!{concat!(env!("OUT_DIR"), "/shaders/src/vs.glsl")} }
|
||||||
mod vs { include!{concat!(env!("OUT_DIR"), "/shaders/src/vs.glsl")} }
|
mod fs { include!{concat!(env!("OUT_DIR"), "/shaders/src/fs.glsl")} }
|
||||||
mod fs { include!{concat!(env!("OUT_DIR"), "/shaders/src/fs.glsl")} }
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
The paths are the same as what we passed (including the extension), except that they are
|
The paths are the same as what we passed (including the extension), except that they are
|
||||||
prefixed with `/shaders/`.
|
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`
|
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.
|
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 vs = vs::Shader::load(&device).expect("failed to create shader module");
|
let fs = fs::Shader::load(&device).expect("failed to create shader module");
|
||||||
let fs = fs::Shader::load(&device).expect("failed to create shader module");
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
We now have a `vs` variable that represents our vertex shader, and a `fs` variable that represents
|
We now have a `vs` variable that represents our vertex shader, and a `fs` variable that represents
|
||||||
our fragment shader.
|
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
|
contains our two shaders but also a lot of additional parameters that describe how the rendering
|
||||||
process will need to be performed.
|
process will need to be performed.
|
||||||
|
|
||||||
{% highlight rust %}
|
use vulkano::descriptor::pipeline_layout::EmptyPipeline;
|
||||||
use vulkano::descriptor::pipeline_layout::EmptyPipeline;
|
use vulkano::framebuffer::Subpass;
|
||||||
use vulkano::framebuffer::Subpass;
|
use vulkano::pipeline::GraphicsPipeline;
|
||||||
use vulkano::pipeline::GraphicsPipeline;
|
use vulkano::pipeline::GraphicsPipelineParams;
|
||||||
use vulkano::pipeline::GraphicsPipelineParams;
|
use vulkano::pipeline::blend::Blend;
|
||||||
use vulkano::pipeline::blend::Blend;
|
use vulkano::pipeline::depth_stencil::DepthStencil;
|
||||||
use vulkano::pipeline::depth_stencil::DepthStencil;
|
use vulkano::pipeline::input_assembly::InputAssembly;
|
||||||
use vulkano::pipeline::input_assembly::InputAssembly;
|
use vulkano::pipeline::multisample::Multisample;
|
||||||
use vulkano::pipeline::multisample::Multisample;
|
use vulkano::pipeline::vertex::SingleBufferDefinition;
|
||||||
use vulkano::pipeline::vertex::SingleBufferDefinition;
|
use vulkano::pipeline::viewport::ViewportsState;
|
||||||
use vulkano::pipeline::viewport::ViewportsState;
|
use vulkano::pipeline::viewport::Viewport;
|
||||||
use vulkano::pipeline::viewport::Viewport;
|
use vulkano::pipeline::viewport::Scissor;
|
||||||
use vulkano::pipeline::viewport::Scissor;
|
|
||||||
|
let pipeline = GraphicsPipeline::new(&device, GraphicsPipelineParams {
|
||||||
let pipeline = GraphicsPipeline::new(&device, GraphicsPipelineParams {
|
vertex_input: SingleBufferDefinition::new(),
|
||||||
vertex_input: SingleBufferDefinition::new(),
|
vertex_shader: vs.main_entry_point(),
|
||||||
vertex_shader: vs.main_entry_point(),
|
input_assembly: InputAssembly::triangle_list(),
|
||||||
input_assembly: InputAssembly::triangle_list(),
|
tessellation: None,
|
||||||
tessellation: None,
|
geometry_shader: None,
|
||||||
geometry_shader: None,
|
|
||||||
|
viewport: ViewportsState::Fixed {
|
||||||
viewport: ViewportsState::Fixed {
|
data: vec![(
|
||||||
data: vec![(
|
Viewport {
|
||||||
Viewport {
|
origin: [0.0, 0.0],
|
||||||
origin: [0.0, 0.0],
|
depth_range: 0.0 .. 1.0,
|
||||||
depth_range: 0.0 .. 1.0,
|
dimensions: [images[0].dimensions()[0] as f32,
|
||||||
dimensions: [images[0].dimensions()[0] as f32,
|
images[0].dimensions()[1] as f32],
|
||||||
images[0].dimensions()[1] as f32],
|
},
|
||||||
},
|
Scissor::irrelevant()
|
||||||
Scissor::irrelevant()
|
)],
|
||||||
)],
|
},
|
||||||
},
|
|
||||||
|
raster: Default::default(),
|
||||||
raster: Default::default(),
|
multisample: Multisample::disabled(),
|
||||||
multisample: Multisample::disabled(),
|
fragment_shader: fs.main_entry_point(),
|
||||||
fragment_shader: fs.main_entry_point(),
|
depth_stencil: DepthStencil::disabled(),
|
||||||
depth_stencil: DepthStencil::disabled(),
|
blend: Blend::pass_through(),
|
||||||
blend: Blend::pass_through(),
|
layout: &EmptyPipeline::new(&device).unwrap(),
|
||||||
layout: &EmptyPipeline::new(&device).unwrap(),
|
render_pass: Subpass::from(&render_pass, 0).unwrap(),
|
||||||
render_pass: Subpass::from(&render_pass, 0).unwrap(),
|
}).unwrap();
|
||||||
}).unwrap();
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
A few noteworthy elements:
|
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
|
that contain the external resources to pass to the shaders. We will cover everything later. For
|
||||||
now only the first two parameters are relevant.
|
now only the first two parameters are relevant.
|
||||||
|
|
||||||
{% highlight rust %}
|
let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool)
|
||||||
let command_buffer = PrimaryCommandBufferBuilder::new(&cb_pool)
|
.draw_inline(&render_pass, &framebuffer, render_pass::ClearValues {
|
||||||
.draw_inline(&render_pass, &framebuffer, render_pass::ClearValues {
|
color: [0.0, 0.0, 1.0, 1.0]
|
||||||
color: [0.0, 0.0, 1.0, 1.0]
|
})
|
||||||
})
|
.draw(&pipeline, &vertex_buffer, &DynamicState::none(), (), &())
|
||||||
.draw(&pipeline, &vertex_buffer, &DynamicState::none(), (), &())
|
.draw_end()
|
||||||
.draw_end()
|
.build();
|
||||||
.build();
|
|
||||||
{% endhighlight %}
|
|
1
www/content/home.md
Normal file
1
www/content/home.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
test
|
16
www/content/template.html
Normal file
16
www/content/template.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Vulkano</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Vulkano</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section id="body-main">
|
||||||
|
{{{body}}}
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -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"
|
|
||||||
;
|
|
30
www/feed.xml
30
www/feed.xml
@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
layout: null
|
|
||||||
---
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
|
||||||
<channel>
|
|
||||||
<title>{{ site.title | xml_escape }}</title>
|
|
||||||
<description>{{ site.description | xml_escape }}</description>
|
|
||||||
<link>{{ site.url }}{{ site.baseurl }}/</link>
|
|
||||||
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
|
|
||||||
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
|
|
||||||
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
|
|
||||||
<generator>Jekyll v{{ jekyll.version }}</generator>
|
|
||||||
{% for post in site.posts limit:10 %}
|
|
||||||
<item>
|
|
||||||
<title>{{ post.title | xml_escape }}</title>
|
|
||||||
<description>{{ post.content | xml_escape }}</description>
|
|
||||||
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
|
|
||||||
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
|
|
||||||
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
|
|
||||||
{% for tag in post.tags %}
|
|
||||||
<category>{{ tag | xml_escape }}</category>
|
|
||||||
{% endfor %}
|
|
||||||
{% for cat in post.categories %}
|
|
||||||
<category>{{ cat | xml_escape }}</category>
|
|
||||||
{% endfor %}
|
|
||||||
</item>
|
|
||||||
{% endfor %}
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
layout: default
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="home">
|
|
||||||
|
|
||||||
<a href="{{ "/guide/01-getting-started.html" | prepend: site.baseurl }}">test</a>
|
|
||||||
|
|
||||||
<h1 class="page-heading">Posts</h1>
|
|
||||||
|
|
||||||
<ul class="post-list">
|
|
||||||
{% for post in site.posts %}
|
|
||||||
<li>
|
|
||||||
<span class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</span>
|
|
||||||
|
|
||||||
<h2>
|
|
||||||
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
|
|
||||||
</h2>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
|
|
||||||
|
|
||||||
</div>
|
|
18
www/src/bin/main.rs
Normal file
18
www/src/bin/main.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (c) 2017 The vulkano developers
|
||||||
|
// Licensed under the Apache License, Version 2.0
|
||||||
|
// <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT
|
||||||
|
// license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
|
||||||
|
// 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)
|
||||||
|
}
|
96
www/src/lib.rs
Normal file
96
www/src/lib.rs
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
// Copyright (c) 2017 The vulkano developers
|
||||||
|
// Licensed under the Apache License, Version 2.0
|
||||||
|
// <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT
|
||||||
|
// license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
|
||||||
|
// 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<A>(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<HashMap<&'static str, String>> = 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())
|
||||||
|
}
|
52
www/static/style.css
Normal file
52
www/static/style.css
Normal file
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user