From 45282d3a54cc50306383c41e4c7e3d982cac69d1 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 6 Jan 2025 22:36:03 +0100 Subject: mesh not visible --- client/src/renderer.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'client/src/renderer.rs') diff --git a/client/src/renderer.rs b/client/src/renderer.rs index 7116a20..34450b2 100644 --- a/client/src/renderer.rs +++ b/client/src/renderer.rs @@ -1,7 +1,8 @@ -use crate::{download::Downloader, scene_prepare::ScenePreparer, scene_render::ScenePipeline}; -use anyhow::{Context, Result, anyhow}; +use crate::{scene_prepare::ScenePreparer, scene_render::ScenePipeline}; +use anyhow::{Result, anyhow}; use log::{info, warn}; use pollster::FutureExt; +use std::sync::Arc; use weareshared::tree::SceneTree; use wgpu::{ Backends, CommandEncoderDescriptor, Device, DeviceDescriptor, Features, Instance, @@ -13,10 +14,11 @@ use winit::window::Window; pub struct Renderer<'a> { surface: Surface<'a>, queue: Queue, - device: Device, + device: Arc, surface_configuration: SurfaceConfiguration, scene_pipeline: ScenePipeline, pub scene_prepare: ScenePreparer, + surface_needs_reconfigure: bool, } impl<'a> Renderer<'a> { pub fn new(window: &'a Window) -> Result { @@ -39,8 +41,11 @@ impl<'a> Renderer<'a> { let (device, queue) = adapter .request_device( &DeviceDescriptor { - required_features: Features::default(), - required_limits: Limits::downlevel_defaults(), + required_features: Features::PUSH_CONSTANTS, + required_limits: Limits { + max_push_constant_size: 48, + ..Limits::default() + }, ..Default::default() }, None, @@ -53,13 +58,16 @@ impl<'a> Renderer<'a> { surface.configure(&device, &surface_configuration); + let device = Arc::new(device); + Ok(Self { scene_pipeline: ScenePipeline::new(&device, surface_configuration.format), - scene_prepare: ScenePreparer::new(), + scene_prepare: ScenePreparer::new(device.clone()), surface, device, queue, surface_configuration, + surface_needs_reconfigure: false, }) } @@ -71,9 +79,15 @@ impl<'a> Renderer<'a> { } pub fn draw(&mut self, scene: &SceneTree) -> Result<()> { + if self.surface_needs_reconfigure { + self.surface + .configure(&self.device, &self.surface_configuration); + self.surface_needs_reconfigure = false + } let target = self.surface.get_current_texture()?; if target.suboptimal { - warn!("suboptimal swapchain texture") + warn!("suboptimal swapchain texture"); + self.surface_needs_reconfigure = true; } let target_view = target .texture -- cgit v1.2.3-70-g09d2