Skip to content

Commit ec3ad1e

Browse files
authored
Merge pull request #18 from jackyarndley/master
Merge minor changes
2 parents 241e429 + 2933991 commit ec3ad1e

File tree

11 files changed

+75
-75
lines changed

11 files changed

+75
-75
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rust_fractal"
3-
version = "0.3.0"
3+
version = "0.4.0"
44
authors = ["jackyarndley <34801340+jackyarndley@users.noreply.github.com>"]
55
description = "Fast, efficient mandelbrot set renderer."
66
edition = "2018"
@@ -10,15 +10,18 @@ image = "0.23.6"
1010
rand = "^0.7.3"
1111
num-complex = "^0.2.4"
1212
rayon = "1.3.1"
13-
rug = "1.9.0"
14-
itertools = "^0.9.0"
1513
exr = "^0.8.0"
1614
smallvec = "^1.4.2"
1715
clap = "3.0.0-beta.1"
1816
config = "0.9"
1917

18+
[dependencies.rug]
19+
version = "1.10"
20+
default-features = false
21+
features = ["float", "complex"]
22+
2023
#Additional commands that can improve performance (maybe by around 5-10%)
2124
[profile.release]
22-
#lto = "fat"
23-
#codegen-units = 1
25+
lto = "fat"
26+
codegen-units = 1
2427
#debug = true

default.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
image_width = 1000
22
image_height = 1000
3-
frames = 99999
3+
frames = 1
4+
export = "colour"

infinity.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
real = "-1.7693831791955150182138472860854737829057472636547514374655282165278881912647564588361634463895296673044858257818203031574874912384217194031282461951137475212550848062085787454772803303225167998662391124184542743017129214423639793169296754394181656831301342622793541423768572435783910849972056869527305207508191441734781061794290699753174911133714351734166117456520272756159178932042908932465102671790878414664628213755990650460738372283470777870306458882898202604001744348908388844962887074505853707095832039410323454920540534378406083202543002080240776000604510883136400112955848408048692373051275999457470473671317598770623174665886582323619043055508383245744667325990917947929662025877792679499645660786033978548337553694613673529685268652251959453874971983533677423356377699336623705491817104771909424891461757868378026419765129606526769522898056684520572284028039883286225342392455089357242793475261134567912757009627599451744942893765395578578179137375672787942139328379364197492987307203001409779081030965660422490200242892023288520510396495370720268688377880981691988243756770625044756604957687314689241825216171368155083773536285069411856763404065046728379696513318216144607821920824027797857625921782413101273331959639628043420017995090636222818019324038366814798438238540927811909247543259203596399903790614916969910733455656494065224399357601105072841234072044886928478250600986666987837467585182504661923879353345164721140166670708133939341595205900643816399988710049682525423837465035288755437535332464750001934325685009025423642056347757530380946799290663403877442547063918905505118152350633031870270153292586262005851702999524577716844595335385805548908126325397736860678083754587744508953038826602270140731059161305854135393230132058326419325267890909463907657787245924319849651660028931472549400310808097453589135197164989941931054546261747594558823583006437970585216728326439804654662779987947232731036794099604937358361568561860539962449610052967074013449293876425609214167615079422980743121960127425155223407999875999884"
22
imag = "0.00423684791873677221492650717136799707668267091740375727945943565011234400080554515730243099502363650631353268335965257182300494805538736306127524814939292355930892834392050796724887904921986666045576626946900666103494014904714323725586979789908520656683202658064024115300378826789786394641622035341055102900456305723718684527210377325846307917512628774672005693326232806953822796755832517188873479124361430989485495501124096329421682827330693532171505367455526637382706988583456915684673202462211937384523487065290004627037270912806345336469007546411109669407622004367957958476890043040953462048335322273359167297049252960438077167010004209439515213189081508634843224000870136889065895088138204552309352430462782158649681507477960551795646930149740918234645225076516652086716320503880420325704104486903747569874284714830068830518642293591138468762031036739665945023607640585036218668993884533558262144356760232561099772965480869237201581493393664645179292489229735815054564819560512372223360478737722905493126886183195223860999679112529868068569066269441982065315045621648665342365985555395338571505660132833205426100878993922388367450899066133115360740011553934369094891871075717765803345451791394082587084902236263067329239601457074910340800624575627557843183429032397590197231701822237810014080715216554518295907984283453243435079846068568753674073705720148851912173075170531293303461334037951893251390031841730968751744420455098473808572196768667200405919237414872570568499964117282073597147065847005207507464373602310697663458722994227826891841411512573589860255142210602837087031792012000966856067648730369466249241454455795058209627003734747970517231654418272974375968391462696901395430614200747446035851467531667672250261488790789606038203516466311672579186528473826173569678887596534006782882871835938615860588356076208162301201143845805878804278970005959539875585918686455482194364808816650829446335905975254727342258614604501418057192598810476108766922935775177687770187001388743012888530139038318783958771247007926690"
3-
zoom = "5.6E1600"
3+
zoom = "1.0E1503"
44
iterations = 3000000

src/bin/main.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,30 @@ fn main() {
99
.version(crate_version!())
1010
.author(crate_authors!())
1111
.arg(
12-
Arg::new("location")
13-
.short('l')
14-
.long("location")
12+
Arg::new("INPUT")
1513
.value_name("FILE")
1614
.about("Sets the location file to use.")
1715
.takes_value(true)
18-
.required(true)
16+
.required(false)
1917
)
2018
.arg(
21-
Arg::new("parameters")
22-
.short('p')
23-
.long("parameters")
19+
Arg::new("options")
20+
.short('o')
21+
.long("options")
2422
.value_name("FILE")
25-
.about("Sets the parameters file to use.")
23+
.about("Sets the options file to use.")
2624
.takes_value(true)
27-
.required(true)
25+
.required(false)
2826
).get_matches();
2927

3028

3129
let mut settings = Config::default();
3230

33-
if let Some(l) = matches.value_of("location") {
31+
if let Some(l) = matches.value_of("INPUT") {
3432
settings.merge(File::with_name(l).required(true)).unwrap();
3533
};
3634

37-
if let Some(p) = matches.value_of("parameters") {
35+
if let Some(p) = matches.value_of("options") {
3836
settings.merge(File::with_name(p).required(true)).unwrap();
3937
};
4038

src/math/perturbation.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ impl Perturbation {
1919

2020
if pixel.delta_current.exponent > -500 {
2121
let z_norm = (reference.perturbation_data[pixel.iteration - reference.start_iteration].z_fixed + delta_current_float).norm_sqr();
22-
// let z_norm = (reference.data[pixel.iteration - reference.start_iteration].z_fixed + pixel.delta_current.to_float()).norm_sqr();
2322

2423
if z_norm < reference.perturbation_data[pixel.iteration - reference.start_iteration].z_tolerance {
2524
pixel.glitched = true;

src/math/series_approximation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ impl SeriesApproximation {
9696
self.valid_iteration = (0..self.probe_start.len()).into_par_iter()
9797
.map(|i| {
9898
let mut valid_iterations = 1;
99-
let mut probe = self.probe_start[i].clone();
99+
let mut probe = self.probe_start[i];
100100

101101
while valid_iterations < self.maximum_iteration {
102102
let coefficients = &self.coefficients[valid_iterations - 1];

src/renderer.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::math::{SeriesApproximation, Perturbation, Reference};
33

44
use std::time::Instant;
55
use std::cmp::{min, max};
6+
use std::io::Write;
67

78
use rand::seq::SliceRandom;
89
use rayon::prelude::*;
@@ -28,13 +29,19 @@ impl FractalRenderer {
2829
let image_width = settings.get_int("image_width").unwrap_or(1000) as usize;
2930
let image_height = settings.get_int("image_height").unwrap_or(1000) as usize;
3031
let maximum_iteration = settings.get_int("iterations").unwrap_or(1000) as usize;
31-
let initial_zoom = settings.get_str("zoom").unwrap_or("1E0".to_string());
32-
let center_real = settings.get_str("real").unwrap_or("-0.75".to_string());
33-
let center_imag = settings.get_str("imag").unwrap_or("0.0".to_string());
32+
let initial_zoom = settings.get_str("zoom").unwrap_or(String::from("1E0")).to_ascii_uppercase();
33+
let center_real = settings.get_str("real").unwrap_or(String::from("-0.75"));
34+
let center_imag = settings.get_str("imag").unwrap_or(String::from("0.0"));
3435
let approximation_order = settings.get_int("approximation_order").unwrap_or(0) as usize;
3536
let glitch_tolerance = settings.get_float("glitch_tolerance").unwrap_or(0.01);
3637
let remaining_frames = settings.get_int("frames").unwrap_or(1) as usize;
3738
let zoom_scale_factor = settings.get_float("zoom_scale").unwrap_or(2.0);
39+
let data_type = match settings.get_str("export").unwrap_or(String::from("COLOUR")).to_ascii_uppercase().as_ref() {
40+
"RAW" => DataType::RAW,
41+
"COLOUR" => DataType::COLOUR,
42+
"BOTH" => DataType::BOTH,
43+
_ => DataType::COLOUR
44+
};
3845
let display_glitches = false;
3946

4047
let aspect = image_width as f64 / image_height as f64;
@@ -70,7 +77,7 @@ impl FractalRenderer {
7077
zoom,
7178
maximum_iteration,
7279
glitch_tolerance,
73-
data_export: DataExport::new(image_width, image_height, display_glitches, DataType::COLOUR),
80+
data_export: DataExport::new(image_width, image_height, display_glitches, data_type),
7481
start_render_time: Instant::now(),
7582
remaining_frames,
7683
zoom_scale_factor,
@@ -82,6 +89,7 @@ impl FractalRenderer {
8289
pub fn render_frame(&mut self, index: usize, filename: String) {
8390
print!("{:<6}", index);
8491
print!("| {:<15}", extended_to_string(self.zoom));
92+
std::io::stdout().flush().unwrap();
8593
let frame_time = Instant::now();
8694
let approximation_time = Instant::now();
8795

@@ -93,7 +101,7 @@ impl FractalRenderer {
93101
}
94102

95103
let delta_pixel = (-2.0 * (4.0 / self.image_height as f64 - 2.0) / self.zoom.mantissa) / self.image_height as f64;
96-
// this should be the delta relative to the image, without the big zoom factor applied.
104+
// This should be the delta relative to the image, without the big zoom factor applied.
97105
let delta_top_left = ComplexFixed::new((4.0 / self.image_width as f64 - 2.0) / self.zoom.mantissa * self.aspect as f64, (4.0 / self.image_height as f64 - 2.0) / self.zoom.mantissa);
98106
let delta_pixel_extended = FloatExtended::new(delta_pixel, -self.zoom.exponent);
99107

@@ -103,6 +111,7 @@ impl FractalRenderer {
103111

104112
print!("| {:<15}", approximation_time.elapsed().as_millis());
105113
print!("| {:<15}", self.series_approximation.valid_iteration);
114+
std::io::stdout().flush().unwrap();
106115

107116
let packing_time = Instant::now();
108117

@@ -129,13 +138,16 @@ impl FractalRenderer {
129138
}).collect::<Vec<PixelData>>();
130139

131140
print!("| {:<15}", packing_time.elapsed().as_millis());
141+
std::io::stdout().flush().unwrap();
132142

133143
let iteration_time = Instant::now();
134144

135145
// This one has no offset because it is not a glitch resolving reference
136146
Perturbation::iterate(&mut pixel_data, &self.center_reference);
137147
self.data_export.export_pixels(&pixel_data, self.maximum_iteration, &self.center_reference);
138148
print!("| {:<15}", iteration_time.elapsed().as_millis());
149+
std::io::stdout().flush().unwrap();
150+
139151

140152
let correction_time = Instant::now();
141153

@@ -171,11 +183,14 @@ impl FractalRenderer {
171183
}
172184

173185
print!("| {:<15}", correction_time.elapsed().as_millis());
186+
std::io::stdout().flush().unwrap();
187+
174188

175189
let saving_time = Instant::now();
176190
self.data_export.save(&filename);
177191
print!("| {:<15}", saving_time.elapsed().as_millis());
178192
println!("| {:<15}| {:<15}", frame_time.elapsed().as_millis(), self.start_render_time.elapsed().as_millis());
193+
std::io::stdout().flush().unwrap();
179194
}
180195

181196
pub fn render(&mut self) {

src/util/data_export.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl DataExport {
6262
}
6363
}
6464

65-
pub fn export_pixels(&mut self, pixel_data: &Vec<PixelData>, maximum_iteration: usize, reference: &Reference) {
65+
pub fn export_pixels(&mut self, pixel_data: &[PixelData], maximum_iteration: usize, reference: &Reference) {
6666
match self.data_type {
6767
DataType::COLOUR => {
6868
for pixel in pixel_data {
@@ -148,7 +148,7 @@ impl DataExport {
148148
}
149149
}
150150

151-
pub fn save(&mut self, filename: &String) {
151+
pub fn save(&mut self, filename: &str) {
152152
match self.data_type {
153153
DataType::COLOUR => {
154154
self.save_colour(filename);
@@ -163,11 +163,11 @@ impl DataExport {
163163
}
164164
}
165165

166-
fn save_colour(&mut self, filename: &String) {
166+
fn save_colour(&mut self, filename: &str) {
167167
image::save_buffer(filename.to_owned() + ".jpg", &self.rgb, self.image_width as u32, self.image_height as u32, image::ColorType::Rgb8).unwrap();
168168
}
169169

170-
fn save_raw(&mut self, filename: &String) {
170+
fn save_raw(&mut self, filename: &str) {
171171
let iterations = simple_image::Channel::non_color_data(simple_image::Text::from("N").unwrap(), simple_image::Samples::U32(self.iterations.clone()));
172172
let smooth = simple_image::Channel::non_color_data(simple_image::Text::from("NF").unwrap(), simple_image::Samples::F32(self.smooth.clone()));
173173

@@ -184,7 +184,7 @@ impl DataExport {
184184
let mut colours = Vec::with_capacity(1024);
185185

186186
for i in 0..1024 {
187-
let value = i as f32 / 1024 as f32;
187+
let value = i as f32 / 1024.0;
188188

189189
let red;
190190
let green;
@@ -213,11 +213,11 @@ impl DataExport {
213213

214214
red = 255.0 + factor * (0.0 - 255.0);
215215
green = 170.0 + factor * (2.0 - 170.0);
216-
blue = 0.0 + factor * (0.0 - 0.0);
216+
blue = 0.0;
217217
} else {
218218
let factor = (value - 0.8575) / (1.0 - 0.8575);
219219

220-
red = 0.0 + factor * (0.0 - 0.0);
220+
red = 0.0;
221221
green = 2.0 + factor * (7.0 - 2.0);
222222
blue = 0.0 + factor * (100.0 - 0.0);
223223
}

0 commit comments

Comments
 (0)