mirror of
https://github.com/griffi-gh/kubi.git
synced 2024-11-10 01:28:41 -06:00
depth, wip
This commit is contained in:
parent
8fd1930ce6
commit
9a01ecd6f2
|
@ -10,6 +10,8 @@ use self::camera::update_camera_unform_buffer;
|
|||
|
||||
pub mod world;
|
||||
pub mod camera;
|
||||
pub mod depth;
|
||||
|
||||
//pub mod primitives;
|
||||
//pub mod selection_box;
|
||||
//pub mod entities;
|
||||
|
@ -107,9 +109,6 @@ pub fn render_master(storages: AllStoragesViewMut) {
|
|||
};
|
||||
|
||||
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
|
||||
storages.run_with_data(world::draw_world, &mut data);
|
||||
}
|
||||
|
|
67
kubi/src/rendering/depth.rs
Normal file
67
kubi/src/rendering/depth.rs
Normal 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);
|
||||
}
|
Loading…
Reference in a new issue