use of org.jwildfire.create.tina.render.RenderThreads in project JWildfire by thargor6.
the class TinaInteractiveRendererController method resumeBtn_clicked.
public void resumeBtn_clicked() {
try {
JFileChooser chooser = new JWFRenderFileChooser(prefs);
if (prefs.getInputFlamePath() != null) {
try {
chooser.setCurrentDirectory(new File(prefs.getInputFlamePath()));
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (chooser.showOpenDialog(imageRootPanel) == JFileChooser.APPROVE_OPTION) {
cancelRender();
File file = chooser.getSelectedFile();
Flame newFlame = new Flame();
FlameRenderer newRenderer = new FlameRenderer(newFlame, prefs, newFlame.isBGTransparency(), false);
ResumedFlameRender resumedRender = newRenderer.resumeRenderFlame(file.getAbsolutePath());
threads = new RenderThreads(resumedRender.getThreads(), new ArrayList<Thread>());
Flame flame = currFlame = newRenderer.getFlame();
// setup size profile
{
int width = newRenderer.getRenderInfo().getImageWidth();
int height = newRenderer.getRenderInfo().getImageHeight();
ResolutionProfile selected = null;
boolean full = false;
boolean halve = false;
boolean quarter = false;
for (int i = 0; i < interactiveResolutionProfileCmb.getItemCount(); i++) {
ResolutionProfile profile = (ResolutionProfile) interactiveResolutionProfileCmb.getItemAt(i);
if (profile.getWidth() == width && profile.getHeight() == height) {
selected = profile;
full = true;
break;
}
}
if (selected == null) {
for (int i = 0; i < interactiveResolutionProfileCmb.getItemCount(); i++) {
ResolutionProfile profile = (ResolutionProfile) interactiveResolutionProfileCmb.getItemAt(i);
if (profile.getWidth() / 2 == width && profile.getHeight() / 2 == height) {
selected = profile;
halve = true;
break;
}
}
}
if (selected == null) {
for (int i = 0; i < interactiveResolutionProfileCmb.getItemCount(); i++) {
ResolutionProfile profile = (ResolutionProfile) interactiveResolutionProfileCmb.getItemAt(i);
if (profile.getWidth() / 4 == width && profile.getHeight() / 4 == height) {
selected = profile;
quarter = true;
break;
}
}
}
if (selected == null) {
selected = new ResolutionProfile(false, width, height);
full = true;
interactiveResolutionProfileCmb.addItem(selected);
}
boolean wasQuarterSelected = quarterSizeButton.isSelected();
boolean wasHalveSelected = halveSizeButton.isSelected();
boolean wasFullSelected = fullSizeButton.isSelected();
refreshing = true;
try {
quarterSizeButton.setSelected(quarter);
halveSizeButton.setSelected(halve);
fullSizeButton.setSelected(full);
} finally {
refreshing = false;
}
ResolutionProfile currSel = (ResolutionProfile) interactiveResolutionProfileCmb.getSelectedItem();
if (currSel == null || !currSel.equals(selected) || wasQuarterSelected != quarter || wasHalveSelected != halve || wasFullSelected != full) {
interactiveResolutionProfileCmb.setSelectedItem(selected);
refreshImagePanel();
} else {
clearScreen();
}
}
//
renderer = newRenderer;
setupProfiles(currFlame);
if (flame.getBgColorRed() > 0 || flame.getBgColorGreen() > 0 || flame.getBgColorBlue() > 0) {
image.fillBackground(flame.getBgColorRed(), flame.getBgColorGreen(), flame.getBgColorBlue());
}
renderer.registerIterationObserver(this);
displayUpdater = createDisplayUpdater();
displayUpdater.initRender(threads.getRenderThreads().size());
pausedRenderTime = resumedRender.getHeader().getElapsedMilliseconds();
renderStartTime = System.currentTimeMillis();
lastQuality = 0.0;
lastQualitySpeed = 0.0;
lastQualityTime = 0;
for (int i = 0; i < threads.getRenderThreads().size(); i++) {
AbstractRenderThread rThread = threads.getRenderThreads().get(i);
Thread eThread = startRenderThread(rThread);
threads.getExecutingThreads().add(eThread);
}
updateDisplayThread = new UpdateDisplayThread();
startDisplayThread(updateDisplayThread);
state = State.RENDER;
enableControls();
}
} catch (Throwable ex) {
errorHandler.handleError(ex);
}
}
Aggregations