@@ -122,6 +122,7 @@ pub fn main() -> anyhow::Result<()> {
122
122
gpu_compute_options,
123
123
redraw_job_queue,
124
124
redraw_result_queue,
125
+ rendering_enabled : CONFIG . rendering . enabled ,
125
126
} ;
126
127
127
128
rendering_thread_ready. wait ( ) ;
@@ -413,17 +414,19 @@ fn rendering_thread(
413
414
) {
414
415
let mut rendering_data = RenderingData :: default ( ) ;
415
416
rendering_thread_ready. wait ( ) ;
417
+ let mut rendering_enabled = CONFIG . rendering . enabled ;
416
418
' main_loop: loop {
417
419
while let Some ( event) = rendering_event_queue. pop ( ) {
418
420
match event {
419
421
RenderingThreadEvent :: Draw ( data) => rendering_data = data,
422
+ RenderingThreadEvent :: SetRendering ( enabled) => rendering_enabled = enabled,
420
423
RenderingThreadEvent :: Exit => {
421
424
ready_to_exit. wait ( ) ;
422
425
break ' main_loop;
423
426
}
424
427
}
425
428
}
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 ( ) {
427
430
let mut scenes = draw_physics ( & rendering_data) ;
428
431
let mut scene = scenes. remove ( 0 ) ;
429
432
for subscene in scenes {
@@ -651,15 +654,17 @@ enum SimulationThreadEvent {
651
654
652
655
enum RenderingThreadEvent {
653
656
Draw ( RenderingData ) ,
657
+ SetRendering ( bool ) ,
654
658
Exit ,
655
659
}
656
660
657
661
impl Debug for RenderingThreadEvent {
658
662
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
+ }
663
668
}
664
669
}
665
670
@@ -704,6 +709,7 @@ struct VelloApp<'s> {
704
709
gpu_compute_options : GpuComputeOptions ,
705
710
redraw_job_queue : & ' s ArrayQueue < Scene > ,
706
711
redraw_result_queue : & ' s ArrayQueue < ( ) > ,
712
+ rendering_enabled : bool ,
707
713
}
708
714
709
715
impl ApplicationHandler < AppEvent > for VelloApp < ' _ > {
@@ -824,6 +830,10 @@ impl ApplicationHandler<AppEvent> for VelloApp<'_> {
824
830
. send ( SimulationThreadEvent :: SetGpuComputeOptions ( self . gpu_compute_options ) )
825
831
. unwrap ( ) ;
826
832
}
833
+ Key :: Character ( "r" ) => {
834
+ self . rendering_enabled = !self . rendering_enabled ;
835
+ self . rendering_event_queue . push ( RenderingThreadEvent :: SetRendering ( self . rendering_enabled ) ) ;
836
+ }
827
837
Key :: Character ( "e" ) => {
828
838
self . simulation_event_sender . send ( SimulationThreadEvent :: ToggleDrawEdf ) . unwrap ( ) ;
829
839
}
@@ -846,34 +856,36 @@ impl ApplicationHandler<AppEvent> for VelloApp<'_> {
846
856
self . last_fps = fps;
847
857
self . min_fps = self . min_fps . min ( fps) ;
848
858
}
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
+ }
877
889
self . frame_count += 1 ;
878
890
} ;
879
891
}
0 commit comments