Skip to content

Commit 1620e03

Browse files
committed
Add option to disable rendering
1 parent 03f72b3 commit 1620e03

File tree

3 files changed

+54
-34
lines changed

3 files changed

+54
-34
lines changed

config.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ randomize_radius_factor = 1
2626
position = [500, 200]
2727
size = [500, 500]
2828
# velocity = [1, 0]
29-
particle_radius = 1
29+
particle_radius = 0.7
3030
particle_spacing = 0.01
3131
particle_mass = 0.1
3232

@@ -63,5 +63,6 @@ particle_mass = 0.1
6363
# particle_mass = 0.1
6464

6565
[rendering]
66+
# enabled = false
6667
color = "dark"
6768
show_edf = true

src/app_config.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,20 @@ pub struct DemoConfig {
183183
#[derive(Deserialize, Clone, Copy)]
184184
#[serde(deny_unknown_fields)]
185185
pub struct RenderConfig {
186+
#[serde(default = "default_rendering_enabled")]
187+
pub enabled: bool,
188+
186189
#[serde(rename = "color", default = "default_color_source")]
187190
pub color_source: ColorSource,
188191

189192
#[serde(default)]
190193
pub show_edf: bool,
191194
}
192195

196+
fn default_rendering_enabled() -> bool {
197+
true
198+
}
199+
193200
fn default_color_source() -> ColorSource {
194201
ColorSource::Velocity
195202
}

src/main.rs

Lines changed: 45 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ pub fn main() -> anyhow::Result<()> {
122122
gpu_compute_options,
123123
redraw_job_queue,
124124
redraw_result_queue,
125+
rendering_enabled: CONFIG.rendering.enabled,
125126
};
126127

127128
rendering_thread_ready.wait();
@@ -413,17 +414,19 @@ fn rendering_thread(
413414
) {
414415
let mut rendering_data = RenderingData::default();
415416
rendering_thread_ready.wait();
417+
let mut rendering_enabled = CONFIG.rendering.enabled;
416418
'main_loop: loop {
417419
while let Some(event) = rendering_event_queue.pop() {
418420
match event {
419421
RenderingThreadEvent::Draw(data) => rendering_data = data,
422+
RenderingThreadEvent::SetRendering(enabled) => rendering_enabled = enabled,
420423
RenderingThreadEvent::Exit => {
421424
ready_to_exit.wait();
422425
break 'main_loop;
423426
}
424427
}
425428
}
426-
if !rendering_data.positions.is_empty() && redraw_job_queue.is_empty() {
429+
if rendering_enabled && !rendering_data.positions.is_empty() && redraw_job_queue.is_empty() {
427430
let mut scenes = draw_physics(&rendering_data);
428431
let mut scene = scenes.remove(0);
429432
for subscene in scenes {
@@ -651,15 +654,17 @@ enum SimulationThreadEvent {
651654

652655
enum RenderingThreadEvent {
653656
Draw(RenderingData),
657+
SetRendering(bool),
654658
Exit,
655659
}
656660

657661
impl Debug for RenderingThreadEvent {
658662
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
659-
f.write_str(match self {
660-
RenderingThreadEvent::Draw(_) => "SetData(...)",
661-
RenderingThreadEvent::Exit => "Exit",
662-
})
663+
match self {
664+
RenderingThreadEvent::Draw(_) => f.write_str("SetData(...)"),
665+
RenderingThreadEvent::SetRendering(enabled) => write!(f, "EnableRendering({enabled})"),
666+
RenderingThreadEvent::Exit => f.write_str("Exit"),
667+
}
663668
}
664669
}
665670

@@ -704,6 +709,7 @@ struct VelloApp<'s> {
704709
gpu_compute_options: GpuComputeOptions,
705710
redraw_job_queue: &'s ArrayQueue<Scene>,
706711
redraw_result_queue: &'s ArrayQueue<()>,
712+
rendering_enabled: bool,
707713
}
708714

709715
impl ApplicationHandler<AppEvent> for VelloApp<'_> {
@@ -824,6 +830,10 @@ impl ApplicationHandler<AppEvent> for VelloApp<'_> {
824830
.send(SimulationThreadEvent::SetGpuComputeOptions(self.gpu_compute_options))
825831
.unwrap();
826832
}
833+
Key::Character("r") => {
834+
self.rendering_enabled = !self.rendering_enabled;
835+
self.rendering_event_queue.push(RenderingThreadEvent::SetRendering(self.rendering_enabled));
836+
}
827837
Key::Character("e") => {
828838
self.simulation_event_sender.send(SimulationThreadEvent::ToggleDrawEdf).unwrap();
829839
}
@@ -846,34 +856,36 @@ impl ApplicationHandler<AppEvent> for VelloApp<'_> {
846856
self.last_fps = fps;
847857
self.min_fps = self.min_fps.min(fps);
848858
}
849-
self.scene.reset();
850-
self.scene.fill(
851-
Fill::NonZero,
852-
Affine::IDENTITY,
853-
css::BLACK,
854-
None,
855-
&Rect::new(0.0, 0.0, CONFIG.window.width as f64, CONFIG.window.height as f64),
856-
);
857-
self.scene.append(&self.simulation_scene, None);
858-
draw_mouse_influence(&mut self.scene, self.mouse_position, self.mouse_influence_radius);
859-
draw_stats(
860-
&mut self.scene,
861-
&mut self.text,
862-
(self.last_fps, self.min_fps),
863-
&self.stats,
864-
self.gpu_compute_options,
865-
)
866-
.expect("failed to draw stats");
867-
868-
let renderer = self.renderers[surface.dev_id].as_mut().expect("failed to get renderer");
869-
let device_handle = &self.context.devices[surface.dev_id];
870-
let surface_texture =
871-
surface.surface.get_current_texture().expect("failed to get current surface texture");
872-
render_scene(&self.scene, surface, &surface_texture, renderer, device_handle);
873-
surface_texture.present();
874-
device_handle.device.poll(Maintain::Poll);
875-
876-
self.redraw_result_queue.force_push(());
859+
if self.rendering_enabled {
860+
self.scene.reset();
861+
self.scene.fill(
862+
Fill::NonZero,
863+
Affine::IDENTITY,
864+
css::BLACK,
865+
None,
866+
&Rect::new(0.0, 0.0, CONFIG.window.width as f64, CONFIG.window.height as f64),
867+
);
868+
self.scene.append(&self.simulation_scene, None);
869+
draw_mouse_influence(&mut self.scene, self.mouse_position, self.mouse_influence_radius);
870+
draw_stats(
871+
&mut self.scene,
872+
&mut self.text,
873+
(self.last_fps, self.min_fps),
874+
&self.stats,
875+
self.gpu_compute_options,
876+
)
877+
.expect("failed to draw stats");
878+
879+
let renderer = self.renderers[surface.dev_id].as_mut().expect("failed to get renderer");
880+
let device_handle = &self.context.devices[surface.dev_id];
881+
let surface_texture =
882+
surface.surface.get_current_texture().expect("failed to get current surface texture");
883+
render_scene(&self.scene, surface, &surface_texture, renderer, device_handle);
884+
surface_texture.present();
885+
device_handle.device.poll(Maintain::Poll);
886+
887+
self.redraw_result_queue.force_push(());
888+
}
877889
self.frame_count += 1;
878890
};
879891
}

0 commit comments

Comments
 (0)