Made the lighting thread safe
This commit is contained in:
parent
7c176bbcde
commit
25314cfebb
|
|
@ -1,6 +1,7 @@
|
||||||
package projectzombie.display;
|
package projectzombie.display;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import org.lwjgl.BufferUtils;
|
import org.lwjgl.BufferUtils;
|
||||||
import org.lwjgl.opengl.GL33;
|
import org.lwjgl.opengl.GL33;
|
||||||
|
|
@ -36,18 +37,18 @@ public class DisplayLighting
|
||||||
private static boolean lighting_new = false;
|
private static boolean lighting_new = false;
|
||||||
public static int lightmap;
|
public static int lightmap;
|
||||||
|
|
||||||
private static Lighting lighting;
|
private static AtomicReference<Lighting> lighting = new AtomicReference<DisplayLighting.Lighting>();
|
||||||
|
|
||||||
public static void setDirty() {
|
public static void setDirty() {
|
||||||
lighting_dirty = true;
|
lighting_dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized static Lighting getLighting() {
|
private static Lighting getLighting() {
|
||||||
return lighting;
|
return lighting.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized static void setLighting(Lighting lighting) {
|
private static void setLighting(Lighting lighting) {
|
||||||
DisplayLighting.lighting = lighting;
|
DisplayLighting.lighting.set(lighting);
|
||||||
lighting_new = true;
|
lighting_new = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package projectzombie.worker;
|
package projectzombie.worker;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import projectzombie.display.DisplayLighting;
|
import projectzombie.display.DisplayLighting;
|
||||||
import projectzombie.task.Task;
|
import projectzombie.task.Task;
|
||||||
|
|
||||||
|
|
@ -14,7 +16,7 @@ public class WorkerLighting extends Thread
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean running;
|
private boolean running;
|
||||||
private LightingTask task;
|
private AtomicReference<LightingTask> task = new AtomicReference<WorkerLighting.LightingTask>();
|
||||||
|
|
||||||
public void processLighting(float[] lights, int width, int height, int x, int y)
|
public void processLighting(float[] lights, int width, int height, int x, int y)
|
||||||
{
|
{
|
||||||
|
|
@ -25,7 +27,7 @@ public class WorkerLighting extends Thread
|
||||||
task.x = x;
|
task.x = x;
|
||||||
task.y = y;
|
task.y = y;
|
||||||
|
|
||||||
this.task = task;
|
this.task.set(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
private float getLight(LightingTask task, int x, int y) {
|
private float getLight(LightingTask task, int x, int y) {
|
||||||
|
|
@ -78,7 +80,7 @@ public class WorkerLighting extends Thread
|
||||||
{
|
{
|
||||||
while(running)
|
while(running)
|
||||||
{
|
{
|
||||||
LightingTask task = this.task;
|
LightingTask task = this.task.get();
|
||||||
|
|
||||||
if(task != null)
|
if(task != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue