diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-06 22:36:03 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-06 22:36:03 +0100 |
commit | 45282d3a54cc50306383c41e4c7e3d982cac69d1 (patch) | |
tree | d9b9046dae519f1e48716a7497c1dc8505d5e4d8 /client/src/renderer.rs | |
parent | 44ef37bca0aa633f8c59d849946faf2319c5446b (diff) | |
download | weareserver-45282d3a54cc50306383c41e4c7e3d982cac69d1.tar weareserver-45282d3a54cc50306383c41e4c7e3d982cac69d1.tar.bz2 weareserver-45282d3a54cc50306383c41e4c7e3d982cac69d1.tar.zst |
mesh not visible
Diffstat (limited to 'client/src/renderer.rs')
-rw-r--r-- | client/src/renderer.rs | 28 |
1 files changed, 21 insertions, 7 deletions
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<Device>, 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<Self> { @@ -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 |