depth, wip

This commit is contained in:
griffi-gh 2024-05-06 16:17:01 +02:00
parent 8fd1930ce6
commit 9a01ecd6f2
2 changed files with 69 additions and 3 deletions

View file

@ -10,6 +10,8 @@ use self::camera::update_camera_unform_buffer;
pub mod world; pub mod world;
pub mod camera; pub mod camera;
pub mod depth;
//pub mod primitives; //pub mod primitives;
//pub mod selection_box; //pub mod selection_box;
//pub mod entities; //pub mod entities;
@ -107,9 +109,6 @@ pub fn render_master(storages: AllStoragesViewMut) {
}; };
if storages.run(is_ingame) { if storages.run(is_ingame) {
//XXX: probably should be in pre_update or sth
storages.run(update_camera_unform_buffer);
//TODO init world render state on demand //TODO init world render state on demand
storages.run_with_data(world::draw_world, &mut data); storages.run_with_data(world::draw_world, &mut data);
} }

View file

@ -0,0 +1,67 @@
use glam::{uvec2, UVec2};
use super::Renderer;
pub struct DepthTexture {
pub depth_texture: wgpu::Texture,
pub depth_view: wgpu::TextureView,
pub depth_sampler: wgpu::Sampler,
}
impl DepthTexture {
fn desc(size: UVec2) -> wgpu::TextureDescriptor<'static> {
wgpu::TextureDescriptor {
label: Some("depth_texture"),
size: wgpu::Extent3d {
width: size.x,
height: size.y,
depth_or_array_layers: 1,
},
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: &[wgpu::TextureFormat::Depth32Float],
}
}
pub fn init(renderer: &Renderer) -> Self {
let size = uvec2(renderer.size().width, renderer.size().height);
let depth_texture_desc = Self::desc(size);
let depth_texture = renderer.device().create_texture(&depth_texture_desc);
let depth_view = depth_texture.create_view(&wgpu::TextureViewDescriptor::default());
let depth_sampler = renderer.device().create_sampler(&wgpu::SamplerDescriptor {
label: Some("depth_sampler"),
address_mode_u: wgpu::AddressMode::ClampToEdge,
address_mode_v: wgpu::AddressMode::ClampToEdge,
address_mode_w: wgpu::AddressMode::ClampToEdge,
mag_filter: wgpu::FilterMode::Nearest,
min_filter: wgpu::FilterMode::Nearest,
mipmap_filter: wgpu::FilterMode::Nearest,
compare: Some(wgpu::CompareFunction::LessEqual),
..Default::default()
});
Self { depth_texture, depth_view, depth_sampler }
}
pub fn resize(&mut self, renderer: &Renderer) {
let old_size = uvec2(self.depth_texture.size().width, self.depth_texture.size().height);
let new_size = uvec2(renderer.size().width, renderer.size().height);
if old_size == new_size { return }
let depth_texture_desc = Self::desc(new_size);
self.depth_texture = renderer.device().create_texture(&depth_texture_desc);
self.depth_view = self.depth_texture.create_view(&wgpu::TextureViewDescriptor::default());
}
}
pub fn init_depth_texture(renderer: &Renderer) -> DepthTexture {
DepthTexture::init(renderer)
}
pub fn resize_depth_texture(
renderer: &Renderer,
depth_texture: &mut DepthTexture,
) {
depth_texture.resize(renderer);
}