Upgrade examples to rust 2018 (#1131)

This commit is contained in:
Lucas Kent 2018-12-07 23:35:19 +11:00 committed by GitHub
parent f997e9322f
commit 34eeea6b52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 30 additions and 88 deletions

View File

@ -1,14 +1,22 @@
[package] [package]
name = "examples" name = "examples"
version = "0.1.0" version = "0.1.0"
edition = "2018"
authors = ["Pierre Krieger <pierre.krieger1708@gmail.com>"] authors = ["Pierre Krieger <pierre.krieger1708@gmail.com>"]
publish = false publish = false
[dependencies] [dependencies]
# The `vulkano` crate is the main crate that you must use to use Vulkan.
vulkano = { path = "../vulkano" } vulkano = { path = "../vulkano" }
# Provides the `shader!` macro that is used to generate code for using shaders.
vulkano-shaders = { path = "../vulkano-shaders" } vulkano-shaders = { path = "../vulkano-shaders" }
# The Vulkan library doesn't provide any functionality to create and handle windows, as
# this would be out of scope. In order to open a window, we are going to use the `winit` crate.
winit = "0.18"
# The `vulkano_win` crate is the link between `vulkano` and `winit`. Vulkano doesn't know about winit,
# and winit doesn't know about vulkano, so import a crate that will provide a link between the two.
vulkano-win = { path = "../vulkano-win" } vulkano-win = { path = "../vulkano-win" }
cgmath = "0.16.1" cgmath = "0.16.1"
image = "0.20.0" image = "0.20.0"
winit = "0.18"
time = "0.1.38" time = "0.1.38"

View File

@ -13,10 +13,6 @@
// been more or more used for general-purpose operations as well. This is called "General-Purpose // been more or more used for general-purpose operations as well. This is called "General-Purpose
// GPU", or *GPGPU*. This is what this example demonstrates. // GPU", or *GPGPU*. This is what this example demonstrates.
// Note that since we don't create any window, fewer imports are needed.
extern crate vulkano;
extern crate vulkano_shaders;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::AutoCommandBufferBuilder; use vulkano::command_buffer::AutoCommandBufferBuilder;
use vulkano::descriptor::descriptor_set::PersistentDescriptorSet; use vulkano::descriptor::descriptor_set::PersistentDescriptorSet;

View File

@ -7,8 +7,6 @@
// notice may not be copied, modified, or distributed except // notice may not be copied, modified, or distributed except
// according to those terms. // according to those terms.
extern crate vulkano;
use vulkano::device::{Device, DeviceExtensions}; use vulkano::device::{Device, DeviceExtensions};
use vulkano::format::Format; use vulkano::format::Format;
use vulkano::image::ImmutableImage; use vulkano::image::ImmutableImage;

View File

@ -140,7 +140,7 @@ impl AmbientLightingSystem {
struct Vertex { struct Vertex {
position: [f32; 2] position: [f32; 2]
} }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
mod vs { mod vs {
vulkano_shaders::shader!{ vulkano_shaders::shader!{

View File

@ -152,7 +152,7 @@ impl DirectionalLightingSystem {
struct Vertex { struct Vertex {
position: [f32; 2] position: [f32; 2]
} }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
mod vs { mod vs {
vulkano_shaders::shader!{ vulkano_shaders::shader!{

View File

@ -166,7 +166,7 @@ impl PointLightingSystem {
struct Vertex { struct Vertex {
position: [f32; 2] position: [f32; 2]
} }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
mod vs { mod vs {
vulkano_shaders::shader!{ vulkano_shaders::shader!{

View File

@ -25,9 +25,9 @@ use vulkano::image::ImageUsage;
use vulkano::image::ImageViewAccess; use vulkano::image::ImageViewAccess;
use vulkano::sync::GpuFuture; use vulkano::sync::GpuFuture;
use frame::ambient_lighting_system::AmbientLightingSystem; use crate::frame::ambient_lighting_system::AmbientLightingSystem;
use frame::directional_lighting_system::DirectionalLightingSystem; use crate::frame::directional_lighting_system::DirectionalLightingSystem;
use frame::point_lighting_system::PointLightingSystem; use crate::frame::point_lighting_system::PointLightingSystem;
/// System that contains the necessary facilities for rendering a single frame. /// System that contains the necessary facilities for rendering a single frame.
pub struct FrameSystem { pub struct FrameSystem {
@ -95,7 +95,7 @@ impl FrameSystem {
// but can't deal with these restrictions, then you should create multiple render passes // but can't deal with these restrictions, then you should create multiple render passes
// instead. // instead.
let render_pass = Arc::new( let render_pass = Arc::new(
ordered_passes_renderpass!(gfx_queue.device().clone(), vulkano::ordered_passes_renderpass!(gfx_queue.device().clone(),
attachments: { attachments: {
// The image that will contain the final rendering (in this example the swapchain // The image that will contain the final rendering (in this example the swapchain
// image, but it could be another image). // image, but it could be another image).

View File

@ -26,13 +26,6 @@
// expensive otherwise. It has some drawbacks, which are the fact that transparent objects must be // expensive otherwise. It has some drawbacks, which are the fact that transparent objects must be
// drawn after the lighting, and that the whole process consumes more memory. // drawn after the lighting, and that the whole process consumes more memory.
extern crate cgmath;
#[macro_use]
extern crate vulkano;
extern crate vulkano_shaders;
extern crate winit;
extern crate vulkano_win;
use vulkano::device::{Device, DeviceExtensions}; use vulkano::device::{Device, DeviceExtensions};
use vulkano::instance::{Instance, PhysicalDevice}; use vulkano::instance::{Instance, PhysicalDevice};
use vulkano::swapchain::{AcquireError, PresentMode, SurfaceTransform, Swapchain, SwapchainCreationError}; use vulkano::swapchain::{AcquireError, PresentMode, SurfaceTransform, Swapchain, SwapchainCreationError};
@ -51,8 +44,8 @@ use cgmath::Vector3;
mod frame; mod frame;
mod triangle_draw_system; mod triangle_draw_system;
use frame::*; use crate::frame::*;
use triangle_draw_system::*; use crate::triangle_draw_system::*;
fn main() { fn main() {
// Basic initialization. See the triangle example if you want more details about this. // Basic initialization. See the triangle example if you want more details about this.

View File

@ -92,7 +92,7 @@ impl TriangleDrawSystem {
struct Vertex { struct Vertex {
position: [f32; 2] position: [f32; 2]
} }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
mod vs { mod vs {
vulkano_shaders::shader!{ vulkano_shaders::shader!{

View File

@ -7,15 +7,6 @@
// notice may not be copied, modified, or distributed except // notice may not be copied, modified, or distributed except
// according to those terms. // according to those terms.
#[macro_use]
extern crate vulkano;
extern crate vulkano_shaders;
extern crate vulkano_win;
extern crate winit;
extern crate cgmath;
extern crate image;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState}; use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
use vulkano::descriptor::descriptor_set::PersistentDescriptorSet; use vulkano::descriptor::descriptor_set::PersistentDescriptorSet;
@ -87,7 +78,7 @@ fn main() {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct Vertex { position: [f32; 2] } struct Vertex { position: [f32; 2] }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
let vertex_buffer = CpuAccessibleBuffer::<[Vertex]>::from_iter( let vertex_buffer = CpuAccessibleBuffer::<[Vertex]>::from_iter(
device.clone(), device.clone(),
@ -104,7 +95,7 @@ fn main() {
let fs = fs::Shader::load(device.clone()).unwrap(); let fs = fs::Shader::load(device.clone()).unwrap();
let render_pass = Arc::new( let render_pass = Arc::new(
single_pass_renderpass!(device.clone(), vulkano::single_pass_renderpass!(device.clone(),
attachments: { attachments: {
color: { color: {
load: Clear, load: Clear,

View File

@ -64,11 +64,6 @@
//! an error), instead it is called *resolving* the image. //! an error), instead it is called *resolving* the image.
//! //!
extern crate image;
#[macro_use]
extern crate vulkano;
extern crate vulkano_shaders;
use std::sync::Arc; use std::sync::Arc;
use image::ImageBuffer; use image::ImageBuffer;
use image::Rgba; use image::Rgba;
@ -108,7 +103,7 @@ fn main() {
// into a non-multisampled one) as part of the render pass. This is the preferred method of // into a non-multisampled one) as part of the render pass. This is the preferred method of
// doing so, as it the advantage that the Vulkan implementation doesn't have to write the // doing so, as it the advantage that the Vulkan implementation doesn't have to write the
// content of the multisampled image back to memory at the end. // content of the multisampled image back to memory at the end.
let render_pass = Arc::new(single_pass_renderpass!( let render_pass = Arc::new(vulkano::single_pass_renderpass!(
device.clone(), device.clone(),
attachments: { attachments: {
// The first framebuffer attachment is the intermediary image. // The first framebuffer attachment is the intermediary image.
@ -187,7 +182,7 @@ void main() {
struct Vertex { struct Vertex {
position: [f32; 2], position: [f32; 2],
} }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
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] };

View File

@ -8,8 +8,6 @@
// according to those terms. // according to those terms.
// TODO: Give a paragraph about what push constants are and what problems they solve // TODO: Give a paragraph about what push constants are and what problems they solve
extern crate vulkano;
extern crate vulkano_shaders;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::AutoCommandBufferBuilder; use vulkano::command_buffer::AutoCommandBufferBuilder;

View File

@ -18,10 +18,6 @@
// $ glslangValidator vert.glsl -V -S vert -o vert.spv // $ glslangValidator vert.glsl -V -S vert -o vert.spv
// $ glslangValidator frag.glsl -V -S frag -o frag.spv // $ glslangValidator frag.glsl -V -S frag -o frag.spv
// Vulkano uses glslangValidator to build your shaders internally. // Vulkano uses glslangValidator to build your shaders internally.
#[macro_use]
extern crate vulkano;
extern crate vulkano_win;
extern crate winit;
use vulkano as vk; use vulkano as vk;
use vulkano::buffer::BufferUsage; use vulkano::buffer::BufferUsage;
@ -62,7 +58,7 @@ pub struct Vertex {
pub color: [f32; 3], pub color: [f32; 3],
} }
impl_vertex!(Vertex, position, color); vulkano::impl_vertex!(Vertex, position, color);
fn main() { fn main() {
let instance = vk::instance::Instance::new(None, &vulkano_win::required_extensions(), None).unwrap(); let instance = vk::instance::Instance::new(None, &vulkano_win::required_extensions(), None).unwrap();
@ -99,7 +95,7 @@ fn main() {
1, usage, &queue, SurfaceTransform::Identity, alpha, PresentMode::Fifo, true, None).unwrap() 1, usage, &queue, SurfaceTransform::Identity, alpha, PresentMode::Fifo, true, None).unwrap()
}; };
let render_pass = Arc::new(single_pass_renderpass!( let render_pass = Arc::new(vulkano::single_pass_renderpass!(
device.clone(), device.clone(),
attachments: { attachments: {
color: { color: {

View File

@ -11,9 +11,6 @@
// shader source code. The boilerplate is taken from the "basic-compute-shader.rs" example, where // shader source code. The boilerplate is taken from the "basic-compute-shader.rs" example, where
// most of the boilerplate is explained. // most of the boilerplate is explained.
extern crate vulkano;
extern crate vulkano_shaders;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::AutoCommandBufferBuilder; use vulkano::command_buffer::AutoCommandBufferBuilder;
use vulkano::descriptor::descriptor_set::PersistentDescriptorSet; use vulkano::descriptor::descriptor_set::PersistentDescriptorSet;

View File

@ -8,8 +8,6 @@
// according to those terms. // according to those terms.
// TODO: Give a paragraph about what specialization are and what problems they solve // TODO: Give a paragraph about what specialization are and what problems they solve
extern crate vulkano;
extern crate vulkano_shaders;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::AutoCommandBufferBuilder; use vulkano::command_buffer::AutoCommandBufferBuilder;

View File

@ -7,14 +7,6 @@
// notice may not be copied, modified, or distributed except // notice may not be copied, modified, or distributed except
// according to those terms. // according to those terms.
#[macro_use]
extern crate vulkano;
extern crate vulkano_win;
extern crate winit;
extern crate cgmath;
extern crate time;
extern crate examples;
use vulkano::buffer::cpu_pool::CpuBufferPool; use vulkano::buffer::cpu_pool::CpuBufferPool;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState}; use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
@ -106,7 +98,7 @@ fn main() {
let fs = fs::Shader::load(device.clone()).unwrap(); let fs = fs::Shader::load(device.clone()).unwrap();
let render_pass = Arc::new( let render_pass = Arc::new(
single_pass_renderpass!(device.clone(), vulkano::single_pass_renderpass!(device.clone(),
attachments: { attachments: {
color: { color: {
load: Clear, load: Clear,

View File

@ -18,12 +18,6 @@
// * tessellation control shader and a tessellation evaluation shader // * tessellation control shader and a tessellation evaluation shader
// * tessellation_shaders(..), patch_list(3) and polygon_mode_line() are called on the pipeline builder // * tessellation_shaders(..), patch_list(3) and polygon_mode_line() are called on the pipeline builder
#[macro_use]
extern crate vulkano;
extern crate vulkano_shaders;
extern crate winit;
extern crate vulkano_win;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState}; use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
use vulkano::device::{Device, DeviceExtensions}; use vulkano::device::{Device, DeviceExtensions};
@ -175,7 +169,7 @@ fn main() {
let vertex_buffer = { let vertex_buffer = {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct Vertex { position: [f32; 2] } struct Vertex { position: [f32; 2] }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
CpuAccessibleBuffer::from_iter(device.clone(), BufferUsage::all(), [ CpuAccessibleBuffer::from_iter(device.clone(), BufferUsage::all(), [
Vertex { position: [-0.5, -0.25] }, Vertex { position: [-0.5, -0.25] },
@ -195,7 +189,7 @@ fn main() {
let tes = tes::Shader::load(device.clone()).unwrap(); let tes = tes::Shader::load(device.clone()).unwrap();
let fs = fs::Shader::load(device.clone()).unwrap(); let fs = fs::Shader::load(device.clone()).unwrap();
let render_pass = Arc::new(single_pass_renderpass!( let render_pass = Arc::new(vulkano::single_pass_renderpass!(
device.clone(), device.clone(),
attachments: { attachments: {
color: { color: {

View File

@ -7,7 +7,6 @@
// notice may not be copied, modified, or distributed except // notice may not be copied, modified, or distributed except
// according to those terms. // according to those terms.
// Welcome to the triangle example! // Welcome to the triangle example!
// //
// This is the only example that is entirely detailed. All the other examples avoid code // This is the only example that is entirely detailed. All the other examples avoid code
@ -17,19 +16,6 @@
// and that you want to learn Vulkan. This means that for example it won't go into details about // and that you want to learn Vulkan. This means that for example it won't go into details about
// what a vertex or a shader is. // what a vertex or a shader is.
// The `vulkano` crate is the main crate that you must use to use Vulkan.
#[macro_use]
extern crate vulkano;
// Provides the `shader!` macro that is used to generate code for using shaders.
extern crate vulkano_shaders;
// The Vulkan library doesn't provide any functionality to create and handle windows, as
// this would be out of scope. In order to open a window, we are going to use the `winit` crate.
extern crate winit;
// The `vulkano_win` crate is the link between `vulkano` and `winit`. Vulkano doesn't know about
// winit, and winit doesn't know about vulkano, so import a crate that will provide a link between
// the two.
extern crate vulkano_win;
use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer}; use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer};
use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState}; use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
use vulkano::device::{Device, DeviceExtensions}; use vulkano::device::{Device, DeviceExtensions};
@ -186,7 +172,7 @@ fn main() {
let vertex_buffer = { let vertex_buffer = {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct Vertex { position: [f32; 2] } struct Vertex { position: [f32; 2] }
impl_vertex!(Vertex, position); vulkano::impl_vertex!(Vertex, position);
CpuAccessibleBuffer::from_iter(device.clone(), BufferUsage::all(), [ CpuAccessibleBuffer::from_iter(device.clone(), BufferUsage::all(), [
Vertex { position: [-0.5, -0.25] }, Vertex { position: [-0.5, -0.25] },
@ -242,7 +228,7 @@ void main() {
// The next step is to create a *render pass*, which is an object that describes where the // The next step is to create a *render pass*, which is an object that describes where the
// output of the graphics pipeline will go. It describes the layout of the images // output of the graphics pipeline will go. It describes the layout of the images
// where the colors, depth and/or stencil information will be written. // where the colors, depth and/or stencil information will be written.
let render_pass = Arc::new(single_pass_renderpass!( let render_pass = Arc::new(vulkano::single_pass_renderpass!(
device.clone(), device.clone(),
attachments: { attachments: {
// `color` is a custom name we give to the first and only attachment. // `color` is a custom name we give to the first and only attachment.