nightshade-renderer 0.53.0

GPU-driven wgpu renderer with a built-in frame graph.
Documentation
use super::WgpuRenderer;
use super::passes;
use super::rendergraph::render_graph_get_pass_mut;

impl WgpuRenderer {
    pub fn sync_present_mode(&mut self, vsync_enabled: bool) {
        let desired =
            super::initialization::pick_present_mode(&self.supported_present_modes, vsync_enabled);
        if desired == self.surface_config.present_mode {
            return;
        }
        self.surface_config.present_mode = desired;
        self.surface.configure(&self.device, &self.surface_config);
    }

    pub fn resize_surface(
        &mut self,
        width: u32,
        height: u32,
    ) -> Result<(), Box<dyn std::error::Error>> {
        if width == 0 || height == 0 {
            return Ok(());
        }

        self.surface_config.width = width;
        self.surface_config.height = height;
        self.surface.configure(&self.device, &self.surface_config);
        self.resize_render_buffers(width, height);

        Ok(())
    }

    pub fn register_render_texture(&mut self, name: &str, view: wgpu::TextureView) {
        let sampler = self.device.create_sampler(&wgpu::SamplerDescriptor {
            label: Some(&format!("{}_sampler", name)),
            address_mode_u: wgpu::AddressMode::ClampToEdge,
            address_mode_v: wgpu::AddressMode::ClampToEdge,
            address_mode_w: wgpu::AddressMode::ClampToEdge,
            mag_filter: wgpu::FilterMode::Linear,
            min_filter: wgpu::FilterMode::Linear,
            mipmap_filter: wgpu::MipmapFilterMode::Nearest,
            ..Default::default()
        });

        if let Some(mesh_pass) = render_graph_get_pass_mut(&mut self.graph, "mesh_pass")
            && let Some(mesh_pass) =
                (mesh_pass as &mut dyn std::any::Any).downcast_mut::<passes::MeshPass>()
        {
            mesh_pass.register_texture(name.to_string(), view, sampler);
        }
    }
}