Skip to content

Commit d091878

Browse files
committed
Code restructuring
IFS Multithreading fixes
1 parent 1634d29 commit d091878

File tree

13 files changed

+359
-297
lines changed

13 files changed

+359
-297
lines changed

.idea/workspace.xml

Lines changed: 179 additions & 177 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/in/tamchow/fractal/Main.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ public static void main(String[] args) {
8888
generator.generate();
8989
}
9090
File outputFile = new File(args[1] + "/Fractal_" + i + ".png");
91-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
92-
ImageIO.write(ImageConverter.toImage(generator.getArgand().getPostProcessed(params.getPostprocessMode(), generator.getNormalized_escapes(), generator.getColor().getByParts())), "png", outputFile);
91+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
92+
ImageIO.write(ImageConverter.toImage(generator.getArgand().getPostProcessed(params.getPostProcessMode(), generator.getNormalized_escapes(), generator.getColor().getByParts())), "png", outputFile);
9393
} else {
9494
ImageIO.write(ImageConverter.toImage(generator.getArgand()), "png", outputFile);
9595
}
@@ -111,8 +111,8 @@ public static void main(String[] args) {
111111
generator.generate();
112112
}
113113
File outputFile = new File(args[1] + "/Fractal_" + i + ".png");
114-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
115-
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostprocessMode(), null, 0)), "png", outputFile);
114+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
115+
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostProcessMode(), null, 0)), "png", outputFile);
116116
} else {
117117
ImageIO.write(ImageConverter.toImage(generator.getPlane()), "png", outputFile);
118118
}
@@ -142,16 +142,16 @@ public static void main(String[] args) {
142142
writer.close();
143143
for (int j = 0; j < frames.getNumFrames(); j++) {
144144
File outputFile = new File(args[1] + "/Fractal_" + i + "/Frame_" + j + ".png");
145-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
146-
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostprocessMode(), null, 0)), "png", outputFile);
145+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
146+
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostProcessMode(), null, 0)), "png", outputFile);
147147
} else {
148148
ImageIO.write(ImageConverter.toImage(generator.getPlane()), "png", outputFile);
149149
}
150150
}
151151
} else {
152152
File outputFile = new File(args[1] + "/Fractal_" + i + ".png");
153-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
154-
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostprocessMode(), null, 0)), "png", outputFile);
153+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
154+
ImageIO.write(ImageConverter.toImage(generator.getPlane().getPostProcessed(params.getPostProcessMode(), null, 0)), "png", outputFile);
155155
} else {
156156
ImageIO.write(ImageConverter.toImage(generator.getPlane()), "png", outputFile);
157157
}
@@ -175,8 +175,8 @@ public static void main(String[] args) {
175175
writer.close();
176176
for (int j = 0; j < frames.getNumFrames(); j++) {
177177
File outputFile = new File(args[1] + "/Fractal_" + i + "/Frame_" + j + ".png");
178-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
179-
ImageIO.write(ImageConverter.toImage(frames.getFrame(j).getPostProcessed(params.getPostprocessMode(), null, 0)), "png", outputFile);
178+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
179+
ImageIO.write(ImageConverter.toImage(frames.getFrame(j).getPostProcessed(params.getPostProcessMode(), null, 0)), "png", outputFile);
180180
} else {
181181
ImageIO.write(ImageConverter.toImage(frames.getFrame(j)), "png", outputFile);
182182
}
@@ -185,8 +185,8 @@ public static void main(String[] args) {
185185
generator.generate();
186186
generator.drawState(generator.getParams().getDepth() - 1);
187187
File outputFile = new File(args[1] + "/Fractal_" + i + ".png");
188-
if (params.getPostprocessMode() != PixelContainer.PostProcessMode.NONE) {
189-
ImageIO.write(ImageConverter.toImage(generator.getCanvas().getPostProcessed(params.getPostprocessMode(), null, 0)), "png", outputFile);
188+
if (params.getPostProcessMode() != PixelContainer.PostProcessMode.NONE) {
189+
ImageIO.write(ImageConverter.toImage(generator.getCanvas().getPostProcessed(params.getPostProcessMode(), null, 0)), "png", outputFile);
190190
} else {
191191
ImageIO.write(ImageConverter.toImage(generator.getCanvas()), "png", outputFile);
192192
}

src/in/tamchow/fractal/Test.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,13 @@ public static void main(String[] args) {
5454
ComplexFractalGenerator jgen;
5555
ComplexFractalParams jgenParams = null;
5656
if (def) {
57-
jgenParams = new ComplexFractalParams(new ComplexFractalInitParams(resx, resy, zoom, zoompow, baseprec, fracmode, func, consts, variableCode, tolerance, cfg, switch_rate, trap), null);
57+
jgenParams = new ComplexFractalParams(new ComplexFractalInitParams(resx, resy, zoom, zoompow, baseprec, fracmode, func, consts, variableCode, tolerance, cfg, switch_rate, trap), null, x_t, y_t);
5858
jgenParams.initParams.skew = skew;
5959
if (constant != null) {
6060
jgenParams.runParams = new ComplexFractalRunParams(iter, escrad, constant);
6161
} else {
6262
jgenParams.runParams = new ComplexFractalRunParams(iter, escrad);
6363
}
64-
jgenParams.x_threads = x_t;
65-
jgenParams.y_threads = y_t;
6664
jgen = new ComplexFractalGenerator(jgenParams, new DesktopProgressPublisher());
6765
} else {
6866
jgen = new ComplexFractalGenerator(fccfg.getParams()[0], new DesktopProgressPublisher());

src/in/tamchow/fractal/config/ConfigReader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ private static ComplexFractalParams getComplexParamFromFile(File paramfile) thro
149149
complexFractalParams.threadDataFromString(thread_data);
150150
}
151151
if (post_process_mode != null) {
152-
complexFractalParams.setPostprocessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
152+
complexFractalParams.setPostProcessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
153153
}
154154
if (zooms != null) {
155155
complexFractalParams.setZoomConfig(ZoomConfig.fromString(zooms));
@@ -236,7 +236,7 @@ private static IFSFractalParams getIFSParamFromFile(File paramfile) throws FileN
236236
ifsFractalParams.setThreads(Integer.valueOf(threads));
237237
}
238238
if (post_process_mode != null) {
239-
ifsFractalParams.setPostprocessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
239+
ifsFractalParams.setPostProcessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
240240
}
241241
ifsFractalParams.setPath(paramfile.getAbsolutePath());
242242
return ifsFractalParams;
@@ -318,7 +318,7 @@ private static ComplexBrotFractalParams getComplexBrotParamFromFile(File paramfi
318318
complexBrotFractalParams.setNum_threads(Integer.valueOf(threads));
319319
}
320320
if (post_process_mode != null) {
321-
complexBrotFractalParams.setPostprocessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
321+
complexBrotFractalParams.setPostProcessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
322322
}
323323
if (switch_rate != null) {
324324
complexBrotFractalParams.setSwitch_rate(Integer.valueOf(switch_rate));
@@ -380,7 +380,7 @@ private static LSFractalParams getLSParamFromFile(File file) throws FileNotFound
380380
LSFractalParams lsFractalParams = new LSFractalParams();
381381
lsFractalParams.fromString(params);
382382
if (post_process_mode != null) {
383-
lsFractalParams.setPostprocessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
383+
lsFractalParams.setPostProcessMode(PixelContainer.PostProcessMode.valueOf(post_process_mode));
384384
}
385385
if (fps != null) {
386386
lsFractalParams.setFps(Integer.valueOf(fps));

src/in/tamchow/fractal/config/fractalconfig/IFS/IFSFractalParams.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
public class IFSFractalParams implements Serializable {
1313
public static final String VARIABLE_CODES = "x:y:r:t:p";
1414
public ZoomConfig zoomConfig;
15-
public PixelContainer.PostProcessMode postprocessMode;
15+
public PixelContainer.PostProcessMode postProcessMode;
1616
public String path;
1717
Matrix[] transforms, translators;
1818
boolean ifsMode;
@@ -31,6 +31,8 @@ public class IFSFractalParams implements Serializable {
3131
double base_precision;
3232
double skew;
3333
private IFSFractalParams() {
34+
setDepth(1);
35+
setThreads(1);
3436
String[] variableCodes = StringManipulator.split(VARIABLE_CODES, ":");
3537
setFrameskip(-1);
3638
setPath("");
@@ -39,7 +41,7 @@ private IFSFractalParams() {
3941
setR_code(variableCodes[2]);
4042
setT_code(variableCodes[3]);
4143
setP_code(variableCodes[4]);
42-
setPostprocessMode(PixelContainer.PostProcessMode.NONE);
44+
setPostProcessMode(PixelContainer.PostProcessMode.NONE);
4345
}
4446
public IFSFractalParams(IFSFractalParams config) {
4547
if (!(config.getColors().length == config.getWeights().length && config.getTransforms().length == config.getTranslators().length)) {
@@ -54,13 +56,18 @@ public IFSFractalParams(IFSFractalParams config) {
5456
setFps(config.getFps());
5557
setPath(config.getPath());
5658
setSkew(config.getSkew());
57-
setPostprocessMode(config.getPostprocessMode());
59+
setPostProcessMode(config.getPostProcessMode());
5860
setThreads(config.getThreads());
5961
setX_code(config.getX_code());
6062
setY_code(config.getY_code());
6163
setR_code(config.getR_code());
6264
setT_code(config.getT_code());
6365
setP_code(config.getP_code());
66+
if (config.zoomConfig.zooms != null) {
67+
this.zoomConfig = new ZoomConfig(config.zoomConfig);
68+
}
69+
setPath(config.getPath());
70+
setPostProcessMode(config.getPostProcessMode());
6471
}
6572
public static IFSFractalParams fromString(String[] input) {
6673
IFSFractalParams params = new IFSFractalParams(); //params.setIfsMode(Boolean.valueOf(input[0]));
@@ -140,12 +147,6 @@ public String getP_code() {
140147
public void setP_code(String p_code) {
141148
this.p_code = p_code;
142149
}
143-
public PixelContainer.PostProcessMode getPostprocessMode() {
144-
return postprocessMode;
145-
}
146-
public void setPostprocessMode(PixelContainer.PostProcessMode postprocessMode) {
147-
this.postprocessMode = postprocessMode;
148-
}
149150
public double getSkew() {
150151
return skew;
151152
}
@@ -168,7 +169,7 @@ public int getDepth() {
168169
return depth;
169170
}
170171
public void setDepth(int depth) {
171-
this.depth = depth;
172+
this.depth = Math.abs((depth == 0) ? 1 : depth);
172173
}
173174
public Matrix[] getTransforms() {
174175
return transforms;
@@ -241,8 +242,8 @@ public void setXfunctions(String[] xfunctions) {
241242
@Override
242243
public String toString() {
243244
String representation = (frameskip >= 0) ? "Frameskip:" + frameskip : "";
244-
representation += (postprocessMode != null) ? "Postprocessing:" + postprocessMode : "";
245-
representation += "\n" + ((ifsMode) ? ifsMode + ":" + createCodeString() : ifsMode) + "\n" + width + "\n" + height + "\n" + base_precision + "\n" + zoom + "\n" + zoomlevel + "\n" + depth + "\n" + fps + "\n" + skew;
245+
representation += (postProcessMode != null) ? "Postprocessing:" + postProcessMode : "";
246+
representation += "\n" + ifsMode + ((ifsMode) ? ":" + createCodeString() : "") + "\n" + width + "\n" + height + "\n" + base_precision + "\n" + zoom + "\n" + zoomlevel + "\n" + depth + "\n" + fps + "\n" + skew;
246247
if (ifsMode) {
247248
for (int i = 0; i < weights.length; i++) {
248249
representation += "\n" + xfunctions[i] + " " + yfunctions[i] + " " + weights[i] + " " + colors[i];
@@ -293,4 +294,10 @@ public double getBase_precision() {
293294
public void setBase_precision(double base_precision) {
294295
this.base_precision = base_precision;
295296
}
297+
public PixelContainer.PostProcessMode getPostProcessMode() {
298+
return postProcessMode;
299+
}
300+
public void setPostProcessMode(PixelContainer.PostProcessMode postProcessMode) {
301+
this.postProcessMode = postProcessMode;
302+
}
296303
}

src/in/tamchow/fractal/config/fractalconfig/complex/ComplexFractalParams.java

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,65 +12,97 @@ public class ComplexFractalParams implements Serializable {
1212
public ComplexFractalRunParams runParams;
1313
public ComplexFractalInitParams initParams;
1414
public ZoomConfig zoomConfig = new ZoomConfig();
15-
public int x_threads, y_threads;
1615
public PixelContainer.PostProcessMode postprocessMode;
1716
public String path;
17+
private int x_threads, y_threads;
1818
public ComplexFractalParams() {
1919
runParams = new ComplexFractalRunParams();
2020
initParams = new ComplexFractalInitParams();
21-
x_threads = 1;
22-
y_threads = 1;
23-
zoomConfig = null;
24-
setPostprocessMode(PixelContainer.PostProcessMode.NONE);
21+
initParams.setHeight(1);
22+
initParams.setWidth(1);
2523
setPath("");
24+
setPostProcessMode(PixelContainer.PostProcessMode.NONE);
25+
setX_threads(1);
26+
setY_threads(1);
2627
}
2728
public ComplexFractalParams(ComplexFractalInitParams initParams, ComplexFractalRunParams runParams, int x_threads, int y_threads) {
28-
this.initParams = new ComplexFractalInitParams(initParams);
29+
if (initParams != null) {
30+
this.initParams = new ComplexFractalInitParams(initParams);
31+
} else {
32+
this.initParams = new ComplexFractalInitParams();
33+
this.initParams.setHeight(1);
34+
this.initParams.setWidth(1);
35+
}
36+
if (runParams != null) {
37+
this.runParams = new ComplexFractalRunParams(runParams);
38+
} else {
39+
this.runParams = new ComplexFractalRunParams();
40+
}
2941
setPath("");
30-
this.runParams = new ComplexFractalRunParams(runParams);
31-
this.x_threads = x_threads;
32-
this.y_threads = y_threads;
42+
setPostProcessMode(PixelContainer.PostProcessMode.NONE);
43+
setX_threads(x_threads);
44+
setY_threads(y_threads);
3345
}
3446
public ComplexFractalParams(ComplexFractalInitParams initParams, ComplexFractalRunParams runParams) {
35-
this.initParams = new ComplexFractalInitParams(initParams);
47+
if (initParams != null) {
48+
this.initParams = new ComplexFractalInitParams(initParams);
49+
} else {
50+
this.initParams = new ComplexFractalInitParams();
51+
this.initParams.setHeight(1);
52+
this.initParams.setWidth(1);
53+
}
3654
if (runParams != null) {
3755
this.runParams = new ComplexFractalRunParams(runParams);
56+
} else {
57+
this.runParams = new ComplexFractalRunParams();
3858
}
39-
this.x_threads = 1;
40-
this.y_threads = 1;
41-
setPostprocessMode(PixelContainer.PostProcessMode.NONE);
4259
setPath("");
60+
setPostProcessMode(PixelContainer.PostProcessMode.NONE);
61+
setX_threads(1);
62+
setY_threads(1);
4363
}
4464
public ComplexFractalParams(ComplexFractalParams params) {
4565
this.initParams = new ComplexFractalInitParams(params.initParams);
4666
this.runParams = new ComplexFractalRunParams(params.runParams);
47-
this.x_threads = params.x_threads;
48-
this.y_threads = params.y_threads;
67+
setX_threads(params.getX_threads());
68+
setY_threads(params.getY_threads());
4969
if (params.zoomConfig.zooms != null) {
5070
this.zoomConfig = new ZoomConfig(params.zoomConfig);
5171
}
52-
setPostprocessMode(params.getPostprocessMode());
72+
setPostProcessMode(params.getPostProcessMode());
5373
setPath(params.getPath());
5474
}
75+
public int getX_threads() {
76+
return x_threads;
77+
}
78+
public void setX_threads(int x_threads) {
79+
this.x_threads = MathUtils.clamp(x_threads, 1, initParams.getWidth());
80+
}
81+
public int getY_threads() {
82+
return y_threads;
83+
}
84+
public void setY_threads(int y_threads) {
85+
this.y_threads = MathUtils.clamp(y_threads, 1, initParams.getHeight());
86+
}
5587
public String getPath() {
5688
return path;
5789
}
5890
public void setPath(String path) {
5991
this.path = path;
6092
}
61-
public PixelContainer.PostProcessMode getPostprocessMode() {
93+
public PixelContainer.PostProcessMode getPostProcessMode() {
6294
return postprocessMode;
6395
}
64-
public void setPostprocessMode(PixelContainer.PostProcessMode postprocessMode) {
65-
this.postprocessMode = postprocessMode;
96+
public void setPostProcessMode(PixelContainer.PostProcessMode postProcessMode) {
97+
this.postprocessMode = postProcessMode;
6698
}
6799
public boolean useThreadedGenerator() {
68-
return (x_threads > 1 || y_threads > 1);
100+
return (getX_threads() * getY_threads() > 1);
69101
}
70102
public void threadDataFromString(String data) {
71103
String[] parts = StringManipulator.split(data, " ");
72-
x_threads = MathUtils.clamp(Integer.valueOf(parts[0]), 1, initParams.getWidth());
73-
y_threads = MathUtils.clamp(Integer.valueOf(parts[1]), 1, initParams.getHeight());
104+
setX_threads(Integer.valueOf(parts[0]));
105+
setY_threads(Integer.valueOf(parts[1]));
74106
}
75107
public void setZoomConfig(ZoomConfig config) {
76108
zoomConfig = new ZoomConfig(config);

0 commit comments

Comments
 (0)