From 24ccc400c4e2f0823c17fe8b319e05ccf6eb13ff Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Fri, 13 May 2016 11:21:07 +0200 Subject: [PATCH] Draft for a website --- www/.gitignore | 3 + www/_config.yml | 21 ++ www/_layouts/default.html | 80 +++++++ www/_layouts/page.html | 14 ++ www/_layouts/post.html | 15 ++ www/_posts/2016-05-12-welcome-to-jekyll.md | 25 +++ www/_sass/_base.scss | 206 ++++++++++++++++++ www/_sass/_layout.scss | 242 +++++++++++++++++++++ www/_sass/_syntax-highlighting.scss | 71 ++++++ www/about.md | 13 ++ www/css/main.scss | 53 +++++ www/feed.xml | 30 +++ www/guide/01-getting-started.md | 32 +++ www/guide/02-first-operation.md | 48 ++++ www/guide/03-window-swapchain.md | 14 ++ www/guide/04-render-pass.md | 17 ++ www/index.html | 25 +++ 17 files changed, 909 insertions(+) create mode 100644 www/.gitignore create mode 100644 www/_config.yml create mode 100644 www/_layouts/default.html create mode 100644 www/_layouts/page.html create mode 100644 www/_layouts/post.html create mode 100644 www/_posts/2016-05-12-welcome-to-jekyll.md create mode 100644 www/_sass/_base.scss create mode 100644 www/_sass/_layout.scss create mode 100644 www/_sass/_syntax-highlighting.scss create mode 100644 www/about.md create mode 100644 www/css/main.scss create mode 100644 www/feed.xml create mode 100644 www/guide/01-getting-started.md create mode 100644 www/guide/02-first-operation.md create mode 100644 www/guide/03-window-swapchain.md create mode 100644 www/guide/04-render-pass.md create mode 100644 www/index.html diff --git a/www/.gitignore b/www/.gitignore new file mode 100644 index 00000000..45c15053 --- /dev/null +++ b/www/.gitignore @@ -0,0 +1,3 @@ +_site +.sass-cache +.jekyll-metadata diff --git a/www/_config.yml b/www/_config.yml new file mode 100644 index 00000000..bf6197d9 --- /dev/null +++ b/www/_config.yml @@ -0,0 +1,21 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely need to edit after that. +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'jekyll serve'. If you change this file, please restart the server process. + +# Site settings +title: Vulkano library +email: your-email@domain.com +description: > # this means to ignore newlines until "baseurl:" + Write an awesome description for your new site here. You can edit this + line in _config.yml. It will appear in your document head meta (for + Google search results) and in your feed.xml site description. +baseurl: "" # the subpath of your site, e.g. /blog +url: "http://yourdomain.com" # the base hostname & protocol for your site +twitter_username: jekyllrb +github_username: jekyll + +# Build settings +markdown: kramdown diff --git a/www/_layouts/default.html b/www/_layouts/default.html new file mode 100644 index 00000000..36c079b1 --- /dev/null +++ b/www/_layouts/default.html @@ -0,0 +1,80 @@ + + + + + + + + {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} + + + + + + + + + + +
+
+ {{ content }} +
+
+ + + + + + + diff --git a/www/_layouts/page.html b/www/_layouts/page.html new file mode 100644 index 00000000..ce233ad7 --- /dev/null +++ b/www/_layouts/page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title }}

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

{{ page.title }}

+ +
+ +
+ {{ content }} +
+ +
diff --git a/www/_posts/2016-05-12-welcome-to-jekyll.md b/www/_posts/2016-05-12-welcome-to-jekyll.md new file mode 100644 index 00000000..40a7e912 --- /dev/null +++ b/www/_posts/2016-05-12-welcome-to-jekyll.md @@ -0,0 +1,25 @@ +--- +layout: post +title: "Welcome to Jekyll!" +date: 2016-05-12 15:35:29 +0200 +categories: jekyll update +--- +You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. + +To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. + +Jekyll also offers powerful support for code snippets: + +{% highlight rust %} +def print_hi(name) + puts "Hi, #{name}" +end +print_hi('Tom') +#=> prints 'Hi, Tom' to STDOUT. +{% endhighlight %} + +Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. + +[jekyll-docs]: http://jekyllrb.com/docs/home +[jekyll-gh]: https://github.com/jekyll/jekyll +[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/www/_sass/_base.scss b/www/_sass/_base.scss new file mode 100644 index 00000000..0883c3cd --- /dev/null +++ b/www/_sass/_base.scss @@ -0,0 +1,206 @@ +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; +} + + + +/** + * Basic styling + */ +body { + font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; + color: $text-color; + background-color: $background-color; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; +} + + + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +%vertical-rhythm { + margin-bottom: $spacing-unit / 2; +} + + + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + + + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: $small-font-size; +} + + + +/** + * Lists + */ +ul, ol { + margin-left: $spacing-unit; +} + +li { + > ul, + > ol { + margin-bottom: 0; + } +} + + + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: $base-font-weight; +} + + + +/** + * Links + */ +a { + color: $brand-color; + text-decoration: none; + + &:visited { + color: darken($brand-color, 15%); + } + + &:hover { + color: $text-color; + text-decoration: underline; + } +} + + + +/** + * Blockquotes + */ +blockquote { + color: $grey-color; + border-left: 4px solid $grey-color-light; + padding-left: $spacing-unit / 2; + font-size: 18px; + letter-spacing: -1px; + font-style: italic; + + > :last-child { + margin-bottom: 0; + } +} + + + +/** + * Code formatting + */ +pre, +code { + font-size: 15px; + border: 1px solid $grey-color-light; + border-radius: 3px; + background-color: #eef; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: auto; + + > code { + border: 0; + padding-right: 0; + padding-left: 0; + } +} + + + +/** + * Wrapper + */ +.wrapper { + max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); + max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); + margin-right: auto; + margin-left: auto; + padding-right: $spacing-unit; + padding-left: $spacing-unit; + @extend %clearfix; + + @include media-query($on-laptop) { + max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); + max-width: calc(#{$content-width} - (#{$spacing-unit})); + padding-right: $spacing-unit / 2; + padding-left: $spacing-unit / 2; + } +} + + + +/** + * Clearfix + */ +%clearfix { + + &:after { + content: ""; + display: table; + clear: both; + } +} + + + +/** + * Icons + */ +.icon { + + > svg { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + + path { + fill: $grey-color; + } + } +} diff --git a/www/_sass/_layout.scss b/www/_sass/_layout.scss new file mode 100644 index 00000000..9cbfddef --- /dev/null +++ b/www/_sass/_layout.scss @@ -0,0 +1,242 @@ +/** + * Site header + */ +.site-header { + border-top: 5px solid $grey-color-dark; + border-bottom: 1px solid $grey-color-light; + min-height: 56px; + + // Positioning context for the mobile navigation icon + position: relative; +} + +.site-title { + font-size: 26px; + font-weight: 300; + line-height: 56px; + letter-spacing: -1px; + margin-bottom: 0; + float: left; + + &, + &:visited { + color: $grey-color-dark; + } +} + +.site-nav { + float: right; + line-height: 56px; + + .menu-icon { + display: none; + } + + .page-link { + color: $text-color; + line-height: $base-line-height; + + // Gaps between nav items, but not on the last one + &:not(:last-child) { + margin-right: 20px; + } + } + + @include media-query($on-palm) { + position: absolute; + top: 9px; + right: $spacing-unit / 2; + background-color: $background-color; + border: 1px solid $grey-color-light; + border-radius: 5px; + text-align: right; + + .menu-icon { + display: block; + float: right; + width: 36px; + height: 26px; + line-height: 0; + padding-top: 10px; + text-align: center; + + > svg { + width: 18px; + height: 15px; + + path { + fill: $grey-color-dark; + } + } + } + + .trigger { + clear: both; + display: none; + } + + &:hover .trigger { + display: block; + padding-bottom: 5px; + } + + .page-link { + display: block; + padding: 5px 10px; + + &:not(:last-child) { + margin-right: 0; + } + margin-left: 20px; + } + } +} + + + +/** + * Site footer + */ +.site-footer { + border-top: 1px solid $grey-color-light; + padding: $spacing-unit 0; +} + +.footer-heading { + font-size: 18px; + margin-bottom: $spacing-unit / 2; +} + +.contact-list, +.social-media-list { + list-style: none; + margin-left: 0; +} + +.footer-col-wrapper { + font-size: 15px; + color: $grey-color; + margin-left: -$spacing-unit / 2; + @extend %clearfix; +} + +.footer-col { + float: left; + margin-bottom: $spacing-unit / 2; + padding-left: $spacing-unit / 2; +} + +.footer-col-1 { + width: -webkit-calc(35% - (#{$spacing-unit} / 2)); + width: calc(35% - (#{$spacing-unit} / 2)); +} + +.footer-col-2 { + width: -webkit-calc(20% - (#{$spacing-unit} / 2)); + width: calc(20% - (#{$spacing-unit} / 2)); +} + +.footer-col-3 { + width: -webkit-calc(45% - (#{$spacing-unit} / 2)); + width: calc(45% - (#{$spacing-unit} / 2)); +} + +@include media-query($on-laptop) { + .footer-col-1, + .footer-col-2 { + width: -webkit-calc(50% - (#{$spacing-unit} / 2)); + width: calc(50% - (#{$spacing-unit} / 2)); + } + + .footer-col-3 { + width: -webkit-calc(100% - (#{$spacing-unit} / 2)); + width: calc(100% - (#{$spacing-unit} / 2)); + } +} + +@include media-query($on-palm) { + .footer-col { + float: none; + width: -webkit-calc(100% - (#{$spacing-unit} / 2)); + width: calc(100% - (#{$spacing-unit} / 2)); + } +} + + + +/** + * Page content + */ +.page-content { + padding: $spacing-unit 0; +} + +.page-heading { + font-size: 20px; +} + +.post-list { + margin-left: 0; + list-style: none; + + > li { + margin-bottom: $spacing-unit; + } +} + +.post-meta { + font-size: $small-font-size; + color: $grey-color; +} + +.post-link { + display: block; + font-size: 24px; +} + + + +/** + * Posts + */ +.post-header { + margin-bottom: $spacing-unit; +} + +.post-title { + font-size: 42px; + letter-spacing: -1px; + line-height: 1; + + @include media-query($on-laptop) { + font-size: 36px; + } +} + +.post-content { + margin-bottom: $spacing-unit; + + h2 { + font-size: 32px; + + @include media-query($on-laptop) { + font-size: 28px; + } + } + + h3 { + font-size: 26px; + + @include media-query($on-laptop) { + font-size: 22px; + } + } + + h4 { + font-size: 20px; + + @include media-query($on-laptop) { + font-size: 18px; + } + } +} diff --git a/www/_sass/_syntax-highlighting.scss b/www/_sass/_syntax-highlighting.scss new file mode 100644 index 00000000..8fac5977 --- /dev/null +++ b/www/_sass/_syntax-highlighting.scss @@ -0,0 +1,71 @@ +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; + @extend %vertical-rhythm; + + .highlighter-rouge & { + background: #eef; + } + + .c { color: #998; font-style: italic } // Comment + .err { color: #a61717; background-color: #e3d2d2 } // Error + .k { font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #998; font-style: italic } // Comment.Multiline + .cp { color: #999; font-weight: bold } // Comment.Preproc + .c1 { color: #998; font-style: italic } // Comment.Single + .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #099 } // Literal.Number + .s { color: #d14 } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #0086B3 } // Name.Builtin + .nc { color: #458; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #900; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #000080 } // Name.Tag + .nv { color: #008080 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #099 } // Literal.Number.Float + .mh { color: #099 } // Literal.Number.Hex + .mi { color: #099 } // Literal.Number.Integer + .mo { color: #099 } // Literal.Number.Oct + .sb { color: #d14 } // Literal.String.Backtick + .sc { color: #d14 } // Literal.String.Char + .sd { color: #d14 } // Literal.String.Doc + .s2 { color: #d14 } // Literal.String.Double + .se { color: #d14 } // Literal.String.Escape + .sh { color: #d14 } // Literal.String.Heredoc + .si { color: #d14 } // Literal.String.Interpol + .sx { color: #d14 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #d14 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #099 } // Literal.Number.Integer.Long +} diff --git a/www/about.md b/www/about.md new file mode 100644 index 00000000..d024a8b5 --- /dev/null +++ b/www/about.md @@ -0,0 +1,13 @@ +--- +layout: page +title: About +permalink: /about/ +--- + +This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/) + +You can find the source code for the Jekyll new theme at: +[jekyll-new](https://github.com/jglovier/jekyll-new) + +You can find the source code for Jekyll at +[jekyll](https://github.com/jekyll/jekyll) diff --git a/www/css/main.scss b/www/css/main.scss new file mode 100644 index 00000000..f2e566e2 --- /dev/null +++ b/www/css/main.scss @@ -0,0 +1,53 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- +@charset "utf-8"; + + + +// Our variables +$base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +$base-font-size: 16px; +$base-font-weight: 400; +$small-font-size: $base-font-size * 0.875; +$base-line-height: 1.5; + +$spacing-unit: 30px; + +$text-color: #111; +$background-color: #fdfdfd; +$brand-color: #2a7ae2; + +$grey-color: #828282; +$grey-color-light: lighten($grey-color, 40%); +$grey-color-dark: darken($grey-color, 25%); + +// Width of the content area +$content-width: 800px; + +$on-palm: 600px; +$on-laptop: 800px; + + + +// Use media queries like this: +// @include media-query($on-palm) { +// .wrapper { +// padding-right: $spacing-unit / 2; +// padding-left: $spacing-unit / 2; +// } +// } +@mixin media-query($device) { + @media screen and (max-width: $device) { + @content; + } +} + + + +// Import partials from `sass_dir` (defaults to `_sass`) +@import + "base", + "layout", + "syntax-highlighting" +; diff --git a/www/feed.xml b/www/feed.xml new file mode 100644 index 00000000..a6628bd8 --- /dev/null +++ b/www/feed.xml @@ -0,0 +1,30 @@ +--- +layout: null +--- + + + + {{ site.title | xml_escape }} + {{ site.description | xml_escape }} + {{ site.url }}{{ site.baseurl }}/ + + {{ site.time | date_to_rfc822 }} + {{ site.time | date_to_rfc822 }} + Jekyll v{{ jekyll.version }} + {% for post in site.posts limit:10 %} + + {{ post.title | xml_escape }} + {{ post.content | xml_escape }} + {{ post.date | date_to_rfc822 }} + {{ post.url | prepend: site.baseurl | prepend: site.url }} + {{ post.url | prepend: site.baseurl | prepend: site.url }} + {% for tag in post.tags %} + {{ tag | xml_escape }} + {% endfor %} + {% for cat in post.categories %} + {{ cat | xml_escape }} + {% endfor %} + + {% endfor %} + + diff --git a/www/guide/01-getting-started.md b/www/guide/01-getting-started.md new file mode 100644 index 00000000..7b8f382d --- /dev/null +++ b/www/guide/01-getting-started.md @@ -0,0 +1,32 @@ +--- +layout: page +title: "Tutorial 1: getting started" +--- + +# Getting started + +{% highlight toml %} +vulkano = "0.1" +{% endhighlight %} + + +{% highlight rust %} +extern crate vulkano; + +use vulkano::instance::Instance; + +fn main() { + let instance = Instance::new(None, &Default::default(), None) + .expect("failed to create instance"); +} +{% endhighlight %} + +This code does the first thing any Vulkan program should do: create an instance. + +You can now try your code by running: + +{% highlight bash %} +cargo run +{% endhighlight %} + +# Enumerating physical devices diff --git a/www/guide/02-first-operation.md b/www/guide/02-first-operation.md new file mode 100644 index 00000000..3a1cfa17 --- /dev/null +++ b/www/guide/02-first-operation.md @@ -0,0 +1,48 @@ +--- +layout: page +title: "Tutorial 2: the first operation" +--- + +# The first operation + +## Creating a device + +Now that we have chosen a physical device, we can create a `Device` object. + +{% highlight rust %} +let (device, mut queues) = { + let device_ext = DeviceExtensions { + khr_swapchain: true, + .. DeviceExtensions::none() + }; + + Device::new(&physical, physical.supported_features(), &device_ext, None, + [(queue, 0.5)].iter().cloned()).expect("failed to create device") +}; +{% endhighlight %} + +We now have an open channel of communication with a Vulkan device! + +In the rest of this article, we are going to ask the device to copy data from a buffer to +another. Copying data is an operation that you do very often in Vulkan, so let's get used +to it early. + +## Creating buffers + +To do so, let's create two buffers first: one source and one destination. There are multiple +ways to create a buffer in vulkano, but for now we're going to use a `CpuAccessibleBuffer`. + +{% highlight rust %} +let source = CpuAccessibleBuffer::new(&device, 3, &BufferUsage::all(), Some(queue.family())) + .expect("failed to create buffer"); +let destination = CpuAccessibleBuffer::new(&device, 3, &BufferUsage::all(), Some(queue.family())) + .expect("failed to create buffer"); +{% endhighlight %} + +## Copying + +Now that we + +{% highlight rust %} +let cb_pool = CommandPool::new(&device); +{% endhighlight %} diff --git a/www/guide/03-window-swapchain.md b/www/guide/03-window-swapchain.md new file mode 100644 index 00000000..7d80449c --- /dev/null +++ b/www/guide/03-window-swapchain.md @@ -0,0 +1,14 @@ +--- +layout: page +title: "Tutorial 3: windows and swapchains" +--- + +# Windows and swapchains + +Vulkan can be used to perform calculations (like OpenCL for example), but its main usage is to +draw graphics. And before we can draw graphics, we have to create a window where to display +them. + +## Creating a window + + diff --git a/www/guide/04-render-pass.md b/www/guide/04-render-pass.md new file mode 100644 index 00000000..94f3848d --- /dev/null +++ b/www/guide/04-render-pass.md @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tutorial 4: render passes" +--- + +# Render passes + +In the previous section, we created a window and asked the GPU to fill its surface with a color. +However our ultimate goal is to draw some shapes on that surface, not just clear it. + +In order to fully optimize and parallelize commands execution, we can't just add ask the GPU +to draw a shape whenever we want. Instead we first have to enter "rendering mode" by entering +a *render pass*, then draw, and then leave the render pass. + +## What is a render pass? + +A render pass describes how . diff --git a/www/index.html b/www/index.html new file mode 100644 index 00000000..aa028a9a --- /dev/null +++ b/www/index.html @@ -0,0 +1,25 @@ +--- +layout: default +--- + +
+ + test + +

Posts

+ + + +

subscribe via RSS

+ +