1
+ use std:: sync:: Arc ;
2
+ // use std::time::Instant;
3
+ use parking_lot:: Mutex ;
4
+
5
+ use druid:: { AppLauncher , LocalizedString , WindowDesc } ;
6
+
7
+ use rust_fractal:: { renderer:: FractalRenderer } ;
8
+ use rust_fractal:: util:: { extended_to_string_long, string_to_extended} ;
9
+ use rust_fractal:: util:: data_export:: ColoringType ;
10
+
11
+ use config:: { Config , File } ;
12
+
13
+ use std:: thread;
14
+ use std:: sync:: mpsc;
15
+ use std:: sync:: atomic:: AtomicBool ;
16
+
17
+ use rust_fractal_gui:: theme:: * ;
18
+ use rust_fractal_gui:: render_thread:: testing_renderer;
19
+ use rust_fractal_gui:: ui;
20
+ use rust_fractal_gui:: widgets:: FractalData ;
21
+
22
+ pub fn main ( ) {
23
+ // Setup the default settings. These are stored in start.toml file
24
+ let mut settings = Config :: default ( ) ;
25
+ settings. merge ( File :: with_name ( "start.toml" ) ) . unwrap ( ) ;
26
+
27
+ if settings. get_bool ( "show_output" ) . unwrap ( ) {
28
+ println ! ( " {:<15}| {:<15}| {:<15}| {:<6}| {:<15}| {:<15}| {:<15}| {:<6}| {:<15}" , "Zoom" , "Approx [ms]" , "Skipped [it]" , "Order" , "Maximum [it]" , "Iteration [ms]" , "Correct [ms]" , "Ref" , "Frame [ms]" ) ;
29
+ } ;
30
+
31
+ let shared_settings = Arc :: new ( Mutex :: new ( settings. clone ( ) ) ) ;
32
+ let shared_renderer = Arc :: new ( Mutex :: new ( FractalRenderer :: new ( settings. clone ( ) ) ) ) ;
33
+ let shared_stop_flag = Arc :: new ( AtomicBool :: new ( false ) ) ;
34
+ let shared_repeat_flag = Arc :: new ( AtomicBool :: new ( false ) ) ;
35
+
36
+ let thread_settings = shared_settings. clone ( ) ;
37
+ let thread_renderer = shared_renderer. clone ( ) ;
38
+ let thread_stop_flag = shared_stop_flag. clone ( ) ;
39
+ let thread_repeat_flag = shared_repeat_flag. clone ( ) ;
40
+
41
+ let buffer = shared_renderer. lock ( ) . data_export . clone ( ) ;
42
+
43
+ let window = WindowDesc :: new ( ui:: window_main ( shared_renderer. clone ( ) ) ) . title (
44
+ LocalizedString :: new ( "rust-fractal" ) ,
45
+ ) . window_size ( ( 1392.0 , 830.0 ) ) . resizable ( true ) . menu ( ui:: make_menu) ;
46
+
47
+ let launcher = AppLauncher :: with_window ( window) ;
48
+
49
+ let event_sink = launcher. get_external_handle ( ) ;
50
+
51
+ let ( sender, reciever) = mpsc:: channel ( ) ;
52
+
53
+ let mut center_reference_zoom = string_to_extended ( & settings. get_str ( "zoom" ) . unwrap ( ) ) ;
54
+ center_reference_zoom. exponent += 40 ;
55
+
56
+ thread:: spawn ( move || testing_renderer ( event_sink, reciever, thread_settings, thread_renderer, thread_stop_flag, thread_repeat_flag) ) ;
57
+
58
+ launcher
59
+ . configure_env ( |env, _| configure_env ( env) )
60
+ . launch ( FractalData {
61
+ image_width : settings. get_int ( "image_width" ) . unwrap ( ) ,
62
+ image_height : settings. get_int ( "image_height" ) . unwrap ( ) ,
63
+ real : settings. get_str ( "real" ) . unwrap ( ) ,
64
+ imag : settings. get_str ( "imag" ) . unwrap ( ) ,
65
+ zoom : settings. get_str ( "zoom" ) . unwrap ( ) ,
66
+ root_zoom : "1E0" . to_string ( ) ,
67
+ iteration_limit : settings. get_int ( "iterations" ) . unwrap ( ) ,
68
+ rotation : settings. get_float ( "rotate" ) . unwrap ( ) ,
69
+ order : settings. get_int ( "approximation_order" ) . unwrap ( ) ,
70
+ period : 0 ,
71
+ palette_source : "default" . to_string ( ) ,
72
+ palette_cyclic : settings. get_bool ( "palette_cyclic" ) . unwrap ( ) ,
73
+ palette_iteration_span : settings. get_float ( "palette_iteration_span" ) . unwrap ( ) ,
74
+ palette_offset : settings. get_float ( "palette_offset" ) . unwrap ( ) ,
75
+ rendering_progress : 0.0 ,
76
+ root_progress : 1.0 ,
77
+ rendering_stage : 1 ,
78
+ rendering_time : 0 ,
79
+ root_iteration : 64 ,
80
+ root_stage : 0 ,
81
+ min_valid_iterations : 1 ,
82
+ max_valid_iterations : 1 ,
83
+ min_iterations : 1 ,
84
+ max_iterations : 1 ,
85
+ display_glitches : settings. get_bool ( "display_glitches" ) . unwrap ( ) ,
86
+ glitch_tolerance : settings. get_float ( "glitch_tolerance" ) . unwrap ( ) ,
87
+ glitch_percentage : settings. get_float ( "glitch_percentage" ) . unwrap ( ) ,
88
+ iteration_interval : settings. get_int ( "data_storage_interval" ) . unwrap ( ) ,
89
+ series_approximation_tiled : settings. get_bool ( "series_approximation_tiled" ) . unwrap ( ) ,
90
+ series_approximation_enabled : settings. get_bool ( "series_approximation_enabled" ) . unwrap ( ) ,
91
+ probe_sampling : settings. get_int ( "probe_sampling" ) . unwrap ( ) ,
92
+ jitter : settings. get_bool ( "jitter" ) . unwrap ( ) ,
93
+ jitter_factor : settings. get_float ( "jitter_factor" ) . unwrap ( ) ,
94
+ auto_adjust_iterations : settings. get_bool ( "auto_adjust_iterations" ) . unwrap ( ) ,
95
+ remove_centre : settings. get_bool ( "remove_centre" ) . unwrap ( ) ,
96
+ renderer : shared_renderer,
97
+ settings : shared_settings,
98
+ sender : Arc :: new ( Mutex :: new ( sender) ) ,
99
+ stop_flag : shared_stop_flag,
100
+ repeat_flag : shared_repeat_flag,
101
+ buffer,
102
+ need_full_rerender : false ,
103
+ zoom_out_enabled : false ,
104
+ pixel_pos : [ 0 , 0 ] ,
105
+ pixel_iterations : 1 ,
106
+ pixel_smooth : 0.0 ,
107
+ pixel_rgb : Arc :: new ( Mutex :: new ( vec ! [ 0u8 ; 255 * 3 ] ) ) ,
108
+ coloring_type : ColoringType :: SmoothIteration ,
109
+ mouse_mode : 0 ,
110
+ current_tab : 0 ,
111
+ zoom_scale_factor : settings. get_float ( "zoom_scale" ) . unwrap ( ) ,
112
+ root_zoom_factor : 0.5 ,
113
+ center_reference_zoom : extended_to_string_long ( center_reference_zoom) ,
114
+ reference_count : 1 ,
115
+ stripe_scale : settings. get_float ( "stripe_scale" ) . unwrap ( ) as f32 ,
116
+ distance_transition : settings. get_float ( "distance_transition" ) . unwrap ( ) as f32 ,
117
+ distance_color : settings. get_bool ( "distance_color" ) . unwrap ( ) ,
118
+ lighting : settings. get_bool ( "lighting" ) . unwrap ( ) ,
119
+ lighting_direction : settings. get_float ( "lighting_direction" ) . unwrap ( ) ,
120
+ lighting_azimuth : settings. get_float ( "lighting_azimuth" ) . unwrap ( ) ,
121
+ lighting_opacity : settings. get_float ( "lighting_opacity" ) . unwrap ( ) ,
122
+ lighting_ambient : settings. get_float ( "lighting_ambient" ) . unwrap ( ) ,
123
+ lighting_diffuse : settings. get_float ( "lighting_diffuse" ) . unwrap ( ) ,
124
+ lighting_specular : settings. get_float ( "lighting_specular" ) . unwrap ( ) ,
125
+ lighting_shininess : settings. get_int ( "lighting_shininess" ) . unwrap ( ) ,
126
+ } )
127
+ . expect ( "launch failed" ) ;
128
+ }
0 commit comments