use of org.jwildfire.create.tina.render.image.RenderImageThread in project JWildfire by thargor6.
the class FlameRenderer method renderImage.
private void renderImage(SimpleImage pImage) {
if (pImage != null) {
int threadCount = prefs.getTinaRenderThreads();
if (threadCount < 1 || pImage.getImageHeight() < 8 * threadCount) {
threadCount = 1;
}
PostDOFBuffer dofBuffer = flame.getCamDOF() > MathLib.EPSILON && flame.getSolidRenderSettings().isSolidRenderingEnabled() ? new PostDOFBuffer(pImage) : null;
int rowsPerThread = pImage.getImageHeight() / threadCount;
List<RenderImageThread> threads = new ArrayList<RenderImageThread>();
for (int i = 0; i < threadCount; i++) {
int startRow = i * rowsPerThread;
int endRow = i < threadCount - 1 ? startRow + rowsPerThread : pImage.getImageHeight();
RenderImageThread thread = new RenderImageThread(flame, logDensityFilter, gammaCorrectionFilter, startRow, endRow, pImage, dofBuffer != null ? new PostDOFCalculator(dofBuffer, flame) : null);
threads.add(thread);
if (threadCount > 1) {
new Thread(thread).start();
} else {
thread.run();
}
}
ThreadTools.waitForThreads(threadCount, threads);
if (dofBuffer != null) {
dofBuffer.renderToImage(pImage);
}
}
}
Aggregations