62 lines
2.0 KiB
Rust
62 lines
2.0 KiB
Rust
use wgpu::{
|
|
util::{BufferInitDescriptor, DeviceExt},
|
|
Buffer, RenderPass,
|
|
};
|
|
|
|
use crate::rendering::wgpu::shader_types;
|
|
|
|
/// The vertex buffer slot used for quad vertex data.
|
|
const VERTEX_BUFFER_SLOT: u32 = 0;
|
|
|
|
/// Ordered list of indices in the [`VERTICES`] array to be used as part of an index buffer.
|
|
pub(in crate::rendering::wgpu) const INDICES: &[u16] = &[0, 1, 2, 2, 3, 1];
|
|
|
|
/// List of vertex positions in normalized device coordinates (NDC) that are used when rendering.
|
|
/// Similar to our metal renderer, we hardcode a list of vertices for each rect we render, and then
|
|
/// determine the actual position of the rect in NDC within the vertex shader.
|
|
const VERTICES: &[shader_types::Vertex] = &[
|
|
shader_types::Vertex {
|
|
position: shader_types::vec2f(0.0, 0.0),
|
|
},
|
|
shader_types::Vertex {
|
|
position: shader_types::vec2f(1.0, 0.0),
|
|
},
|
|
shader_types::Vertex {
|
|
position: shader_types::vec2f(0.0, 1.0),
|
|
},
|
|
shader_types::Vertex {
|
|
position: shader_types::vec2f(1.0, 1.0),
|
|
},
|
|
];
|
|
|
|
pub(super) struct Resources {
|
|
index_buffer: Buffer,
|
|
vertex_buffer: Buffer,
|
|
}
|
|
|
|
impl Resources {
|
|
pub fn new(device: &wgpu::Device) -> Self {
|
|
let index_buffer = device.create_buffer_init(&BufferInitDescriptor {
|
|
label: Some("Quad Index Buffer"),
|
|
contents: bytemuck::cast_slice(INDICES),
|
|
usage: wgpu::BufferUsages::INDEX,
|
|
});
|
|
|
|
let vertex_buffer = device.create_buffer_init(&BufferInitDescriptor {
|
|
label: Some("Quad Vertex Buffer"),
|
|
contents: bytemuck::cast_slice(VERTICES),
|
|
usage: wgpu::BufferUsages::VERTEX,
|
|
});
|
|
|
|
Self {
|
|
index_buffer,
|
|
vertex_buffer,
|
|
}
|
|
}
|
|
|
|
pub fn configure_render_pass<'a>(&'a self, render_pass: &mut RenderPass<'a>) {
|
|
render_pass.set_vertex_buffer(VERTEX_BUFFER_SLOT, self.vertex_buffer.slice(..));
|
|
render_pass.set_index_buffer(self.index_buffer.slice(..), wgpu::IndexFormat::Uint16);
|
|
}
|
|
}
|