diff --git a/chunky/src/java/se/llbit/chunky/renderer/RenderWorkerPool.java b/chunky/src/java/se/llbit/chunky/renderer/RenderWorkerPool.java index 51b129d5d..1749b2759 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/RenderWorkerPool.java +++ b/chunky/src/java/se/llbit/chunky/renderer/RenderWorkerPool.java @@ -44,6 +44,7 @@ public static class RenderWorker extends Thread { public final Random random; public final int id; + public final WorkerState state = new WorkerState(); private long lastSleep; private long sleepTime = 0; @@ -56,6 +57,7 @@ public RenderWorker(RenderWorkerPool pool, int id, long seed) { this.pool = pool; this.id = id; this.random = new Random(seed); + state.random = this.random; lastSleep = System.currentTimeMillis(); } diff --git a/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java b/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java index f87039e1a..a8b21a457 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java +++ b/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java @@ -69,11 +69,8 @@ protected void submitTiles(DefaultRenderManager manager, BiConsumer manager.pool.submit(worker -> { - WorkerState state = new WorkerState(); - state.ray = new Ray(); - state.ray.setNormal(0, 0, -1); - state.random = worker.random; - + WorkerState state = worker.state; + state.reset(); IntIntMutablePair pair = new IntIntMutablePair(0, 0); for (int i = tile.x0; i < tile.x1; i++) { diff --git a/chunky/src/java/se/llbit/chunky/renderer/WorkerState.java b/chunky/src/java/se/llbit/chunky/renderer/WorkerState.java index 380ffa28a..42d1e2e0a 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/WorkerState.java +++ b/chunky/src/java/se/llbit/chunky/renderer/WorkerState.java @@ -16,6 +16,7 @@ */ package se.llbit.chunky.renderer; +import se.llbit.chunky.block.minecraft.Air; import se.llbit.math.Ray; import se.llbit.math.Vector4; @@ -25,7 +26,19 @@ * State for a render worker. */ public class WorkerState { - public Ray ray; + public Ray ray = new Ray(); public Vector4 attenuation = new Vector4(); public Random random; + + public void reset() { + ray.distance = 0; + ray.setPrevMaterial(Air.INSTANCE, 0); + ray.setCurrentMaterial(Air.INSTANCE, 0); + ray.depth = 0; + ray.t = 0; + ray.tNext = 0; + ray.specular = false; + + attenuation.set(0, 0, 0, 0); + } }