sophus_renderer 0.14.0

wgpu-based renderer
Documentation
use sophus_image::ImageSize;

use crate::{
    types::DOG_MULTISAMPLE_COUNT,
    RenderContext,
};

#[derive(Debug)]
pub(crate) struct NdcZBuffer {
    pub(crate) _multisample_texture: wgpu::Texture,
    pub(crate) multisample_texture_view: wgpu::TextureView,

    pub(crate) final_texture: wgpu::Texture,
    pub(crate) final_texture_view: wgpu::TextureView,
}

impl NdcZBuffer {
    pub(crate) fn new(render_state: &RenderContext, view_port_size: &ImageSize) -> Self {
        let size = wgpu::Extent3d {
            width: view_port_size.width as u32,
            height: view_port_size.height as u32,
            depth_or_array_layers: 1,
        };
        let desc = wgpu::TextureDescriptor {
            label: Some("ndc depth multisample texture"),
            size,
            mip_level_count: 1,
            sample_count: DOG_MULTISAMPLE_COUNT,
            dimension: wgpu::TextureDimension::D2,
            format: wgpu::TextureFormat::Depth32Float,
            usage: wgpu::TextureUsages::RENDER_ATTACHMENT
                | wgpu::TextureUsages::COPY_SRC
                | wgpu::TextureUsages::TEXTURE_BINDING,
            view_formats: &[],
        };
        let multisample_texture = render_state.wgpu_device.create_texture(&desc);
        let multisample_texture_view =
            multisample_texture.create_view(&wgpu::TextureViewDescriptor::default());

        let desc = wgpu::TextureDescriptor {
            label: Some("depth final texture"),
            size,
            mip_level_count: 1,
            sample_count: 1,
            dimension: wgpu::TextureDimension::D2,
            format: wgpu::TextureFormat::R32Float,
            usage: wgpu::TextureUsages::RENDER_ATTACHMENT
                | wgpu::TextureUsages::COPY_SRC
                | wgpu::TextureUsages::TEXTURE_BINDING
                | wgpu::TextureUsages::STORAGE_BINDING,
            view_formats: &[],
        };
        let final_texture = render_state.wgpu_device.create_texture(&desc);
        let final_texture_view = final_texture.create_view(&wgpu::TextureViewDescriptor::default());
        NdcZBuffer {
            _multisample_texture: multisample_texture,
            multisample_texture_view,
            final_texture,
            final_texture_view,
        }
    }
}