#[derive(Debug)]
pub struct ShadowMapAtlas {
texture: wgpu::Texture,
view: wgpu::TextureView,
size: u32,
layers: u32,
}
impl ShadowMapAtlas {
pub fn new(device: &wgpu::Device, size: u32, layers: u32) -> Self {
let size = size.max(1);
let layers = layers.max(1);
let texture = device.create_texture(&wgpu::TextureDescriptor {
label: Some("scenix.shadow.atlas"),
size: wgpu::Extent3d {
width: size,
height: size,
depth_or_array_layers: layers,
},
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: wgpu::TextureFormat::Depth32Float,
usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING,
view_formats: &[],
});
let view = texture.create_view(&wgpu::TextureViewDescriptor {
label: Some("scenix.shadow.atlas.view"),
dimension: Some(wgpu::TextureViewDimension::D2Array),
..Default::default()
});
Self {
texture,
view,
size,
layers,
}
}
#[inline]
pub const fn view(&self) -> &wgpu::TextureView {
&self.view
}
#[inline]
pub const fn texture(&self) -> &wgpu::Texture {
&self.texture
}
#[inline]
pub const fn size(&self) -> u32 {
self.size
}
#[inline]
pub const fn layers(&self) -> u32 {
self.layers
}
}