Skip to content

Commit

Permalink
migrated ModelVertex to use bytemuck derive
Browse files Browse the repository at this point in the history
  • Loading branch information
sotrh committed Nov 14, 2020
1 parent 9a221fb commit 0620f0b
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 122 deletions.
4 changes: 1 addition & 3 deletions code/beginner/tutorial9-models/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
}
unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down
4 changes: 1 addition & 3 deletions code/intermediate/tutorial10-lighting/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
}
unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down
38 changes: 18 additions & 20 deletions code/intermediate/tutorial11-normals/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: cgmath::Vector3<f32>,
tex_coords: cgmath::Vector2<f32>,
normal: cgmath::Vector3<f32>,
tangent: cgmath::Vector3<f32>,
bitangent: cgmath::Vector3<f32>,
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
tangent: [f32; 3],
bitangent: [f32; 3],
}

unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down Expand Up @@ -185,13 +183,13 @@ impl Model {
let v1 = vertices[c[1] as usize];
let v2 = vertices[c[2] as usize];

let pos0 = v0.position;
let pos1 = v1.position;
let pos2 = v2.position;
let pos0: cgmath::Vector3<_> = v0.position.into();
let pos1: cgmath::Vector3<_> = v1.position.into();
let pos2: cgmath::Vector3<_> = v2.position.into();

let uv0 = v0.tex_coords;
let uv1 = v1.tex_coords;
let uv2 = v2.tex_coords;
let uv0: cgmath::Vector2<_> = v0.tex_coords.into();
let uv1: cgmath::Vector2<_> = v1.tex_coords.into();
let uv2: cgmath::Vector2<_> = v2.tex_coords.into();

// Calculate the edges of the triangle
let delta_pos1 = pos1 - pos0;
Expand All @@ -213,13 +211,13 @@ impl Model {
let bitangent = (delta_pos2 * delta_uv1.x - delta_pos1 * delta_uv2.x) * r;

// We'll use the same tangent/bitangent for each vertex in the triangle
vertices[c[0] as usize].tangent = tangent;
vertices[c[1] as usize].tangent = tangent;
vertices[c[2] as usize].tangent = tangent;
vertices[c[0] as usize].tangent = tangent.into();
vertices[c[1] as usize].tangent = tangent.into();
vertices[c[2] as usize].tangent = tangent.into();

vertices[c[0] as usize].bitangent = bitangent;
vertices[c[1] as usize].bitangent = bitangent;
vertices[c[2] as usize].bitangent = bitangent;
vertices[c[0] as usize].bitangent = bitangent.into();
vertices[c[1] as usize].bitangent = bitangent.into();
vertices[c[2] as usize].bitangent = bitangent.into();
}

let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
Expand Down
38 changes: 18 additions & 20 deletions code/intermediate/tutorial12-camera/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: cgmath::Vector3<f32>,
tex_coords: cgmath::Vector2<f32>,
normal: cgmath::Vector3<f32>,
tangent: cgmath::Vector3<f32>,
bitangent: cgmath::Vector3<f32>,
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
tangent: [f32; 3],
bitangent: [f32; 3],
}

unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down Expand Up @@ -185,13 +183,13 @@ impl Model {
let v1 = vertices[c[1] as usize];
let v2 = vertices[c[2] as usize];

let pos0 = v0.position;
let pos1 = v1.position;
let pos2 = v2.position;
let pos0: cgmath::Vector3<_> = v0.position.into();
let pos1: cgmath::Vector3<_> = v1.position.into();
let pos2: cgmath::Vector3<_> = v2.position.into();

let uv0 = v0.tex_coords;
let uv1 = v1.tex_coords;
let uv2 = v2.tex_coords;
let uv0: cgmath::Vector2<_> = v0.tex_coords.into();
let uv1: cgmath::Vector2<_> = v1.tex_coords.into();
let uv2: cgmath::Vector2<_> = v2.tex_coords.into();

// Calculate the edges of the triangle
let delta_pos1 = pos1 - pos0;
Expand All @@ -213,13 +211,13 @@ impl Model {
let bitangent = (delta_pos2 * delta_uv1.x - delta_pos1 * delta_uv2.x) * r;

// We'll use the same tangent/bitangent for each vertex in the triangle
vertices[c[0] as usize].tangent = tangent;
vertices[c[1] as usize].tangent = tangent;
vertices[c[2] as usize].tangent = tangent;
vertices[c[0] as usize].tangent = tangent.into();
vertices[c[1] as usize].tangent = tangent.into();
vertices[c[2] as usize].tangent = tangent.into();

vertices[c[0] as usize].bitangent = bitangent;
vertices[c[1] as usize].bitangent = bitangent;
vertices[c[2] as usize].bitangent = bitangent;
vertices[c[0] as usize].bitangent = bitangent.into();
vertices[c[1] as usize].bitangent = bitangent.into();
vertices[c[2] as usize].bitangent = bitangent.into();
}

let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
Expand Down
38 changes: 18 additions & 20 deletions code/intermediate/tutorial13-threading/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: cgmath::Vector3<f32>,
tex_coords: cgmath::Vector2<f32>,
normal: cgmath::Vector3<f32>,
tangent: cgmath::Vector3<f32>,
bitangent: cgmath::Vector3<f32>,
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
tangent: [f32; 3],
bitangent: [f32; 3],
}

unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down Expand Up @@ -202,13 +200,13 @@ impl Model {
let v1 = vertices[c[1] as usize];
let v2 = vertices[c[2] as usize];

let pos0 = v0.position;
let pos1 = v1.position;
let pos2 = v2.position;
let pos0: cgmath::Vector3<_> = v0.position.into();
let pos1: cgmath::Vector3<_> = v1.position.into();
let pos2: cgmath::Vector3<_> = v2.position.into();

let uv0 = v0.tex_coords;
let uv1 = v1.tex_coords;
let uv2 = v2.tex_coords;
let uv0: cgmath::Vector2<_> = v0.tex_coords.into();
let uv1: cgmath::Vector2<_> = v1.tex_coords.into();
let uv2: cgmath::Vector2<_> = v2.tex_coords.into();

// Calculate the edges of the triangle
let delta_pos1 = pos1 - pos0;
Expand All @@ -230,13 +228,13 @@ impl Model {
let bitangent = (delta_pos2 * delta_uv1.x - delta_pos1 * delta_uv2.x) * r;

// We'll use the same tangent/bitangent for each vertex in the triangle
vertices[c[0] as usize].tangent = tangent;
vertices[c[1] as usize].tangent = tangent;
vertices[c[2] as usize].tangent = tangent;
vertices[c[0] as usize].tangent = tangent.into();
vertices[c[1] as usize].tangent = tangent.into();
vertices[c[2] as usize].tangent = tangent.into();

vertices[c[0] as usize].bitangent = bitangent;
vertices[c[1] as usize].bitangent = bitangent;
vertices[c[2] as usize].bitangent = bitangent;
vertices[c[0] as usize].bitangent = bitangent.into();
vertices[c[1] as usize].bitangent = bitangent.into();
vertices[c[2] as usize].bitangent = bitangent.into();
}

let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
Expand Down
38 changes: 18 additions & 20 deletions code/research/performance/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,15 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: cgmath::Vector3<f32>,
tex_coords: cgmath::Vector2<f32>,
normal: cgmath::Vector3<f32>,
tangent: cgmath::Vector3<f32>,
bitangent: cgmath::Vector3<f32>,
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
tangent: [f32; 3],
bitangent: [f32; 3],
}

unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down Expand Up @@ -190,13 +188,13 @@ impl Model {
let v1 = vertices[c[1] as usize];
let v2 = vertices[c[2] as usize];

let pos0 = v0.position;
let pos1 = v1.position;
let pos2 = v2.position;
let pos0: cgmath::Vector3<_> = v0.position.into();
let pos1: cgmath::Vector3<_> = v1.position.into();
let pos2: cgmath::Vector3<_> = v2.position.into();

let uv0 = v0.tex_coords;
let uv1 = v1.tex_coords;
let uv2 = v2.tex_coords;
let uv0: cgmath::Vector2<_> = v0.tex_coords.into();
let uv1: cgmath::Vector2<_> = v1.tex_coords.into();
let uv2: cgmath::Vector2<_> = v2.tex_coords.into();

// Calculate the edges of the triangle
let delta_pos1 = pos1 - pos0;
Expand All @@ -218,13 +216,13 @@ impl Model {
let bitangent = (delta_pos2 * delta_uv1.x - delta_pos1 * delta_uv2.x) * r;

// We'll use the same tangent/bitangent for each vertex in the triangle
vertices[c[0] as usize].tangent = tangent;
vertices[c[1] as usize].tangent = tangent;
vertices[c[2] as usize].tangent = tangent;
vertices[c[0] as usize].tangent = tangent.into();
vertices[c[1] as usize].tangent = tangent.into();
vertices[c[2] as usize].tangent = tangent.into();

vertices[c[0] as usize].bitangent = bitangent;
vertices[c[1] as usize].bitangent = bitangent;
vertices[c[2] as usize].bitangent = bitangent;
vertices[c[0] as usize].bitangent = bitangent.into();
vertices[c[1] as usize].bitangent = bitangent.into();
vertices[c[2] as usize].bitangent = bitangent.into();
}

let vertex_buffer = device.create_buffer_with_data(
Expand Down
38 changes: 18 additions & 20 deletions code/showcase/framework/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: cgmath::Vector3<f32>,
tex_coords: cgmath::Vector2<f32>,
normal: cgmath::Vector3<f32>,
tangent: cgmath::Vector3<f32>,
bitangent: cgmath::Vector3<f32>,
position: [f32; 3],
tex_coords: [f32; 2],
normal: [f32; 3],
tangent: [f32; 3],
bitangent: [f32; 3],
}

unsafe impl bytemuck::Zeroable for ModelVertex {}
unsafe impl bytemuck::Pod for ModelVertex {}

impl Vertex for ModelVertex {
fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> {
Expand Down Expand Up @@ -185,13 +183,13 @@ impl<'a> Model<'a> {
let v1 = vertices[c[1] as usize];
let v2 = vertices[c[2] as usize];

let pos0 = v0.position;
let pos1 = v1.position;
let pos2 = v2.position;
let pos0: cgmath::Vector3<_> = v0.position.into();
let pos1: cgmath::Vector3<_> = v1.position.into();
let pos2: cgmath::Vector3<_> = v2.position.into();

let uv0 = v0.tex_coords;
let uv1 = v1.tex_coords;
let uv2 = v2.tex_coords;
let uv0: cgmath::Vector2<_> = v0.tex_coords.into();
let uv1: cgmath::Vector2<_> = v1.tex_coords.into();
let uv2: cgmath::Vector2<_> = v2.tex_coords.into();

// Calculate the edges of the triangle
let delta_pos1 = pos1 - pos0;
Expand All @@ -213,13 +211,13 @@ impl<'a> Model<'a> {
let bitangent = (delta_pos2 * delta_uv1.x - delta_pos1 * delta_uv2.x) * r;

// We'll use the same tangent/bitangent for each vertex in the triangle
vertices[c[0] as usize].tangent = tangent;
vertices[c[1] as usize].tangent = tangent;
vertices[c[2] as usize].tangent = tangent;
vertices[c[0] as usize].tangent = tangent.into();
vertices[c[1] as usize].tangent = tangent.into();
vertices[c[2] as usize].tangent = tangent.into();

vertices[c[0] as usize].bitangent = bitangent;
vertices[c[1] as usize].bitangent = bitangent;
vertices[c[2] as usize].bitangent = bitangent;
vertices[c[0] as usize].bitangent = bitangent.into();
vertices[c[1] as usize].bitangent = bitangent.into();
vertices[c[2] as usize].bitangent = bitangent.into();
}

let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
Expand Down
2 changes: 1 addition & 1 deletion docs/beginner/tutorial9-models/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub trait Vertex {
}

#[repr(C)]
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ModelVertex {
position: [f32; 3],
tex_coords: [f32; 2],
Expand Down
Loading

0 comments on commit 0620f0b

Please sign in to comment.