2021-09-07 20:25:56 +00:00
|
|
|
//use super::utils::create_debug_label;
|
2020-10-16 15:46:40 +00:00
|
|
|
use bytemuck::{Pod, Zeroable};
|
|
|
|
use wgpu::util::DeviceExt;
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct Globals {
|
|
|
|
bind_group: wgpu::BindGroup,
|
2022-09-20 20:36:03 +00:00
|
|
|
_buffer: wgpu::Buffer,
|
2020-10-16 15:46:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[repr(C)]
|
2021-02-17 04:34:12 +00:00
|
|
|
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
|
2022-12-27 21:09:42 +00:00
|
|
|
pub struct GlobalsUniform {
|
2020-10-16 15:46:40 +00:00
|
|
|
view_matrix: [[f32; 4]; 4],
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Globals {
|
2022-09-20 20:36:03 +00:00
|
|
|
pub fn new(
|
|
|
|
device: &wgpu::Device,
|
|
|
|
layout: &wgpu::BindGroupLayout,
|
|
|
|
viewport_width: u32,
|
|
|
|
viewport_height: u32,
|
|
|
|
) -> Self {
|
|
|
|
let temp_label = create_debug_label!("Globals buffer");
|
|
|
|
let buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
|
|
|
|
label: temp_label.as_deref(),
|
|
|
|
contents: bytemuck::cast_slice(&[GlobalsUniform {
|
|
|
|
view_matrix: [
|
|
|
|
[1.0 / (viewport_width as f32 / 2.0), 0.0, 0.0, 0.0],
|
|
|
|
[0.0, -1.0 / (viewport_height as f32 / 2.0), 0.0, 0.0],
|
|
|
|
[0.0, 0.0, 1.0, 0.0],
|
|
|
|
[-1.0, 1.0, 0.0, 1.0],
|
|
|
|
],
|
|
|
|
}]),
|
|
|
|
usage: wgpu::BufferUsages::UNIFORM,
|
2020-10-16 15:46:40 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
let bind_group_label = create_debug_label!("Globals bind group");
|
|
|
|
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
|
|
|
label: bind_group_label.as_deref(),
|
|
|
|
layout: &layout,
|
|
|
|
entries: &[wgpu::BindGroupEntry {
|
|
|
|
binding: 0,
|
2022-12-28 17:29:58 +00:00
|
|
|
resource: buffer.as_entire_binding(),
|
2020-10-16 15:46:40 +00:00
|
|
|
}],
|
|
|
|
});
|
|
|
|
|
|
|
|
Self {
|
|
|
|
bind_group,
|
2022-09-20 20:36:03 +00:00
|
|
|
_buffer: buffer,
|
2020-10-16 15:46:40 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bind_group(&self) -> &wgpu::BindGroup {
|
|
|
|
&self.bind_group
|
|
|
|
}
|
|
|
|
}
|