summaryrefslogtreecommitdiff
path: root/client/src/renderer.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-06 22:36:03 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-06 22:36:03 +0100
commit45282d3a54cc50306383c41e4c7e3d982cac69d1 (patch)
treed9b9046dae519f1e48716a7497c1dc8505d5e4d8 /client/src/renderer.rs
parent44ef37bca0aa633f8c59d849946faf2319c5446b (diff)
downloadweareserver-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.rs28
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