Skip to content

Commit 2148d35

Browse files
committed
Add a hacky fix for when render passes are significantly longer than SPS_AVERAGE_TIME
1 parent d09db86 commit 2148d35

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

chunky/src/java/se/llbit/chunky/renderer/DefaultRenderManager.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ private void updateRenderState(Scene scene) {
374374
}
375375
}
376376

377-
private static final int SPS_AVERAGE_TIME = 180;
377+
private static final int SPS_AVERAGE_TIME = 1;
378378
private LinkedList<Integer> spp_history = new LinkedList<Integer>();
379379
private LinkedList<Double> spp_history_times = new LinkedList<Double>();
380380

@@ -386,6 +386,12 @@ private int samplesPerSecond() {
386386
int canvasHeight = bufferedScene.canvasHeight();
387387
long pixelsPerFrame = (long) canvasWidth * canvasHeight;
388388
double renderTime = bufferedScene.renderTime / 1000.0;
389+
390+
// Avoid incorrect output if the average time per render pass were to exceed SPS_AVERAGE_TIME
391+
// Somewhat hacky, as it will break if there is an outlier pass that's >SPS_AVERAGE_TIME, and 0 will be returned
392+
if (renderTime / spp >= SPS_AVERAGE_TIME)
393+
return (int) ((bufferedScene.spp * pixelsPerFrame) / renderTime);
394+
389395
if (renderTime < SPS_AVERAGE_TIME) {
390396
return (int) ((bufferedScene.spp * pixelsPerFrame) / renderTime);
391397
} else {
@@ -417,6 +423,9 @@ private void updateRenderProgress() {
417423
spp_history_times.removeFirst();
418424
spp_history.removeFirst();
419425
}
426+
System.out.println(renderTime);
427+
System.out.println(Arrays.toString(spp_history.toArray()));
428+
System.out.println(Arrays.toString(spp_history_times.toArray()));
420429
// Update render status display.
421430
renderStatusListeners.forEach(listener -> {
422431
listener.setRenderTime(bufferedScene.renderTime);

0 commit comments

Comments
 (0)