Skip to content

Commit 7857ed3

Browse files
Remove unnecessary overlay renders
1 parent b5e4786 commit 7857ed3

4 files changed

Lines changed: 18 additions & 4 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

desktop/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ ron = { workspace = true}
3636
bytemuck = { workspace = true }
3737
glam = { workspace = true }
3838
vello = { workspace = true }
39+
derivative = { workspace = true }

desktop/src/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl WinitApp {
5353
let FrontendMessage::RenderOverlays(overlay_context) = message else { unreachable!() };
5454
if let Some(graphics_state) = &mut self.graphics_state {
5555
let scene = overlay_context.take_scene();
56-
graphics_state.render_overlays(&scene);
56+
graphics_state.set_overlays_scene(scene);
5757
}
5858
}
5959

desktop/src/render/graphics_state.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use winit::window::Window;
55

66
pub(crate) use wgpu_executor::Context as WgpuContext;
77

8-
#[derive(Debug)]
8+
#[derive(derivative::Derivative)]
9+
#[derivative(Debug)]
910
pub(crate) struct GraphicsState {
1011
surface: wgpu::Surface<'static>,
1112
context: WgpuContext,
@@ -20,6 +21,8 @@ pub(crate) struct GraphicsState {
2021
overlays_texture: Option<wgpu::Texture>,
2122
ui_texture: Option<wgpu::Texture>,
2223
bind_group: Option<wgpu::BindGroup>,
24+
#[derivative(Debug = "ignore")]
25+
overlays_scene: Option<vello::Scene>,
2326
}
2427

2528
impl GraphicsState {
@@ -178,6 +181,7 @@ impl GraphicsState {
178181
overlays_texture: None,
179182
ui_texture: None,
180183
bind_group: None,
184+
overlays_scene: None,
181185
}
182186
}
183187

@@ -212,13 +216,17 @@ impl GraphicsState {
212216
self.viewport_offset = offset;
213217
}
214218

215-
pub(crate) fn render_overlays(&mut self, scene: &vello::Scene) {
219+
pub(crate) fn set_overlays_scene(&mut self, scene: vello::Scene) {
220+
self.overlays_scene = Some(scene);
221+
}
222+
223+
fn render_overlays(&mut self, scene: vello::Scene) {
216224
let Some(viewport_texture) = self.viewport_texture.as_ref() else {
217225
tracing::warn!("No viewport texture bound, cannot render overlays");
218226
return;
219227
};
220228
let size = glam::UVec2::new(viewport_texture.width(), viewport_texture.height());
221-
let texture = futures::executor::block_on(self.executor.render_vello_scene_to_texture(scene, size, &Default::default(), Color::TRANSPARENT));
229+
let texture = futures::executor::block_on(self.executor.render_vello_scene_to_texture(&scene, size, &Default::default(), Color::TRANSPARENT));
222230
let Ok(texture) = texture else {
223231
tracing::error!("Error rendering overlays");
224232
return;
@@ -227,6 +235,10 @@ impl GraphicsState {
227235
}
228236

229237
pub(crate) fn render(&mut self) -> Result<(), wgpu::SurfaceError> {
238+
if let Some(scene) = self.overlays_scene.take() {
239+
self.render_overlays(scene);
240+
}
241+
230242
let output = self.surface.get_current_texture()?;
231243
let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
232244

0 commit comments

Comments
 (0)